+ All Categories
Home > Documents > Automatická správa laboratoře s OS Windows pomocí ... · v Praze F3 Fakulta elektrotechnick ......

Automatická správa laboratoře s OS Windows pomocí ... · v Praze F3 Fakulta elektrotechnick ......

Date post: 17-Jan-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
49
Bakalářská práce České vysoké učení technické v Praze F3 Fakulta elektrotechnická Katedra počítačů Automatická správa laboratoře s OS Windows pomocí technologie Puppet Jan Štěpánek Softwarové technologie a management Květen 2016 Vedoucí práce: Ing. Ondřej Votava
Transcript

Bakalaacuteřskaacute praacutece

Českeacutevysokeacuteučeniacute technickeacutev Praze

F3 Fakulta elektrotechnickaacuteKatedra počiacutetačů

Automatickaacute spraacuteva laboratoře sOS Windows pomociacute technologiePuppet

Jan ŠtěpaacutenekSoftwaroveacute technologie a management

Květen 2016Vedouciacute praacutece Ing Ondřej Votava

Poděkovaacuteniacute ProhlaacutešeniacuteRaacuted bych poděkoval vedouciacutemu praacutece

panu Ing Ondřeji Votavovi za trpělivosta vstřiacutecnost při tvorbě teacuteto praacutece panuAleši Kapicovi za jeho rady a konzulta-ce při implementaci praacutece V neposledniacuteřadě děkuji myacutem přaacutetelům a rodině zapodporu po celou dobu meacuteho studia

Prohlašuji že jsem předloženou praacutecivypracoval samostatně a že jsem uvedlveškereacute použiteacute informačniacute zdroje v sou-ladu s Metodickyacutem pokynem o dodržo-vaacuteniacute etickyacutech principů při přiacutepravě vy-sokoškolskyacutech zaacutevěrečnyacutech praciacute

V Praze dne 10 5 2016

v

Abstrakt AbstractTato praacutece se zabyacutevaacute problemati-

kou automatizovaneacute spraacutevy počiacutetačů soperačniacutem systeacutemem Windows pomociacutetechnologie Puppet Ciacutelem je před-stavit technologii Puppet možnostispraacutevy operačniacuteho systeacutemu Windowsa navrhnout pracovniacute postup diacutekyktereacutemu lze Puppet udržitelně a sys-tematicky provozovat Součaacutestiacute praacuteceje teacutež implementace spraacutevy vybranyacutechzdrojů operačniacuteho systeacutemu Windows vtestovaciacutem prostřediacute

Kliacutečovaacute slova Puppet spraacuteva počiacute-tačoveacute infrastruktury bakalaacuteřskaacute zaacutevě-rečnaacute praacutece

This thesis focuses on how to managecomputer infrastructure with Windowsoperating system using Puppet technol-ogy The goal of this work is to intro-duce Puppet technology various Pup-petrsquos capabilities of Windows manage-ment and to propose workflow for in-frastructure implementation and furthersystematic development This work in-cludes implementation of managementof various Windows resources in test en-vironment

Keywords Puppet computer in-frastructure management bachelor the-sis

Title translation Automatic man-agement of pc laboratory with OSWindows based on Puppet technology

vi

Obsah 1 Uacutevod 111 Osobniacute motivace 1

2 Představeniacute naacutestroje Puppet 221 Co to je CM tool 2

211 Jazyk konfiguračniacutehosouboru 2

212 Styl programovaacuteniacute kon-figurace 2

213 Nastaveniacute klientskeacutehostroje 3

214 Distribučniacute model pull push 3

215 Idempotence 322 Puppet 3

221 Open Source Puppetvs Puppet Enterprise 4

23 Slovniacuteček pojmů z prostřediacutePuppet 4

Agent Node 4Master 4Manifest 4Modul 4Katalog 4

24 Dvě varianty architekturyPuppet infrastruktury 5

25 Zdroje Puppetu jako zaacuteklad-niacute prvky ovlaacutedaacuteniacute systeacutemu 6

26 Podporovaneacute platformy 627 Jak ziacuteskat Puppet 728 Proč jsem vybral Puppet 7

3 Multiplatformniacute Puppet 831 Soubory 832 Uživateleacute a skupiny uživatelů 933 Služby 934 Zaacuteznamy hosts 935 Instalace programů 936 Reboot 937 Spouštěniacute vlastniacuteho přiacutekazu 938 Plaacutenovaneacute uacutelohy 1039 Windows registry 10

310 Active Directory 103101 Spraacuteva Active Directory 103102 Modul domainndash

membership 103103 Modul acl 11

3104 Dalšiacute moduly pro ovlaacute-daacuteniacute prostřediacute Windows 11

4 Testovaacuteniacute 1241 Statickaacute kotrola koacutedu 1242 Unit testy 1243 Akceptačniacute testy 1244 Test Driven Development 13

5 Testovaciacute prostřediacute AWS 1451 Požadavky na virtualizačniacute

platformu 1452 Amazon Web services 1553 Služby AWS 15

531 VPC 15532 EC2 15533 Route53 16

6 Workflow 1761 Spraacuteva externiacutech modulů 17

611 Puppet module 17612 Git Submodule 17613 Puppetfile 17

62 Udržovaacuteniacute konfigurace veverzovaciacutem systeacutemu 18

63 Puppet Environments 1864 r10k 18

7 Implementace 2071 Specifikace uacutelohy 2072 Vyacuteběr technologiiacute 2073 Vyacutevojoveacute prostřediacute 20

731 Psaniacute Puppet koacutedu 23732 Navaacutezaacuteniacute komunikace

agentů s masterem 23733 Nasazeniacute koacutedu na vyacute-

vojoveacute prostřediacute 2374 Vyacuteslednaacute konfigurace 23

741 Modul students 24742 Modul classroomx

programs 24743 Modul classroomx

test 258 Otestovaacuteniacute funkčnosti imple-

mentace 2681 Unit testy 2682 Akceptačniacute testy 2783 Testovaacuteniacute struktury vyacutevojo-

veacuteho prostřediacute 2884 Dedikovaneacute testovaciacute stroje 29

vii

841 Rozděleniacute testů naWindows a Unix 29

85 Test driven development 3086 Vyacutesledky testů 30

861 Vyacutesledky testů siacuteťoveacuteinfrastruktury 30

862 Vyacutesledky testů testo-vaciacutech strojů 31

863 Vyacutesledky testů agentů 31864 Ukaacutezka reportovaciacuteho

naacutestroje rspec 319 Zaacutevěr 34

Literatura 35A Slovniacuteček 39

viii

Tabulky Obraacutezky81 Vyacutesledky unit testů modulu

awsvpc 3082 Vyacutesledky akceptačniacutech testů

modulu awsvpc 3183 Vyacutesledky akceptačniacutech tes-

tů modulu awsvpc ndash siacuteťovaacutekomunikace 31

84 Vyacutesledky akceptačniacutech testůkonfigurace testovaciacutech strojů 31

85 Vyacutesledky unit testů modulustudents 32

86 Vyacutesledky unit testů moduluclassroomtest 32

87 Vyacutesledky unit testů moduluclassroomprograms 32

88 Vyacutesledky akceptačniacutech testůPuppet agentů 33

21 Komunikace mezi puppetagentem a masterem 5

22 Zdroje puppet 623 Obliacutebenost CM naacutestrojů 771 Diagram vyacutevojoveacuteho prostře-

diacute v AWS 2181 Report běhu rspec testu 33

ix

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Poděkovaacuteniacute ProhlaacutešeniacuteRaacuted bych poděkoval vedouciacutemu praacutece

panu Ing Ondřeji Votavovi za trpělivosta vstřiacutecnost při tvorbě teacuteto praacutece panuAleši Kapicovi za jeho rady a konzulta-ce při implementaci praacutece V neposledniacuteřadě děkuji myacutem přaacutetelům a rodině zapodporu po celou dobu meacuteho studia

Prohlašuji že jsem předloženou praacutecivypracoval samostatně a že jsem uvedlveškereacute použiteacute informačniacute zdroje v sou-ladu s Metodickyacutem pokynem o dodržo-vaacuteniacute etickyacutech principů při přiacutepravě vy-sokoškolskyacutech zaacutevěrečnyacutech praciacute

V Praze dne 10 5 2016

v

Abstrakt AbstractTato praacutece se zabyacutevaacute problemati-

kou automatizovaneacute spraacutevy počiacutetačů soperačniacutem systeacutemem Windows pomociacutetechnologie Puppet Ciacutelem je před-stavit technologii Puppet možnostispraacutevy operačniacuteho systeacutemu Windowsa navrhnout pracovniacute postup diacutekyktereacutemu lze Puppet udržitelně a sys-tematicky provozovat Součaacutestiacute praacuteceje teacutež implementace spraacutevy vybranyacutechzdrojů operačniacuteho systeacutemu Windows vtestovaciacutem prostřediacute

Kliacutečovaacute slova Puppet spraacuteva počiacute-tačoveacute infrastruktury bakalaacuteřskaacute zaacutevě-rečnaacute praacutece

This thesis focuses on how to managecomputer infrastructure with Windowsoperating system using Puppet technol-ogy The goal of this work is to intro-duce Puppet technology various Pup-petrsquos capabilities of Windows manage-ment and to propose workflow for in-frastructure implementation and furthersystematic development This work in-cludes implementation of managementof various Windows resources in test en-vironment

Keywords Puppet computer in-frastructure management bachelor the-sis

Title translation Automatic man-agement of pc laboratory with OSWindows based on Puppet technology

vi

Obsah 1 Uacutevod 111 Osobniacute motivace 1

2 Představeniacute naacutestroje Puppet 221 Co to je CM tool 2

211 Jazyk konfiguračniacutehosouboru 2

212 Styl programovaacuteniacute kon-figurace 2

213 Nastaveniacute klientskeacutehostroje 3

214 Distribučniacute model pull push 3

215 Idempotence 322 Puppet 3

221 Open Source Puppetvs Puppet Enterprise 4

23 Slovniacuteček pojmů z prostřediacutePuppet 4

Agent Node 4Master 4Manifest 4Modul 4Katalog 4

24 Dvě varianty architekturyPuppet infrastruktury 5

25 Zdroje Puppetu jako zaacuteklad-niacute prvky ovlaacutedaacuteniacute systeacutemu 6

26 Podporovaneacute platformy 627 Jak ziacuteskat Puppet 728 Proč jsem vybral Puppet 7

3 Multiplatformniacute Puppet 831 Soubory 832 Uživateleacute a skupiny uživatelů 933 Služby 934 Zaacuteznamy hosts 935 Instalace programů 936 Reboot 937 Spouštěniacute vlastniacuteho přiacutekazu 938 Plaacutenovaneacute uacutelohy 1039 Windows registry 10

310 Active Directory 103101 Spraacuteva Active Directory 103102 Modul domainndash

membership 103103 Modul acl 11

3104 Dalšiacute moduly pro ovlaacute-daacuteniacute prostřediacute Windows 11

4 Testovaacuteniacute 1241 Statickaacute kotrola koacutedu 1242 Unit testy 1243 Akceptačniacute testy 1244 Test Driven Development 13

5 Testovaciacute prostřediacute AWS 1451 Požadavky na virtualizačniacute

platformu 1452 Amazon Web services 1553 Služby AWS 15

531 VPC 15532 EC2 15533 Route53 16

6 Workflow 1761 Spraacuteva externiacutech modulů 17

611 Puppet module 17612 Git Submodule 17613 Puppetfile 17

62 Udržovaacuteniacute konfigurace veverzovaciacutem systeacutemu 18

63 Puppet Environments 1864 r10k 18

7 Implementace 2071 Specifikace uacutelohy 2072 Vyacuteběr technologiiacute 2073 Vyacutevojoveacute prostřediacute 20

731 Psaniacute Puppet koacutedu 23732 Navaacutezaacuteniacute komunikace

agentů s masterem 23733 Nasazeniacute koacutedu na vyacute-

vojoveacute prostřediacute 2374 Vyacuteslednaacute konfigurace 23

741 Modul students 24742 Modul classroomx

programs 24743 Modul classroomx

test 258 Otestovaacuteniacute funkčnosti imple-

mentace 2681 Unit testy 2682 Akceptačniacute testy 2783 Testovaacuteniacute struktury vyacutevojo-

veacuteho prostřediacute 2884 Dedikovaneacute testovaciacute stroje 29

vii

841 Rozděleniacute testů naWindows a Unix 29

85 Test driven development 3086 Vyacutesledky testů 30

861 Vyacutesledky testů siacuteťoveacuteinfrastruktury 30

862 Vyacutesledky testů testo-vaciacutech strojů 31

863 Vyacutesledky testů agentů 31864 Ukaacutezka reportovaciacuteho

naacutestroje rspec 319 Zaacutevěr 34

Literatura 35A Slovniacuteček 39

viii

Tabulky Obraacutezky81 Vyacutesledky unit testů modulu

awsvpc 3082 Vyacutesledky akceptačniacutech testů

modulu awsvpc 3183 Vyacutesledky akceptačniacutech tes-

tů modulu awsvpc ndash siacuteťovaacutekomunikace 31

84 Vyacutesledky akceptačniacutech testůkonfigurace testovaciacutech strojů 31

85 Vyacutesledky unit testů modulustudents 32

86 Vyacutesledky unit testů moduluclassroomtest 32

87 Vyacutesledky unit testů moduluclassroomprograms 32

88 Vyacutesledky akceptačniacutech testůPuppet agentů 33

21 Komunikace mezi puppetagentem a masterem 5

22 Zdroje puppet 623 Obliacutebenost CM naacutestrojů 771 Diagram vyacutevojoveacuteho prostře-

diacute v AWS 2181 Report běhu rspec testu 33

ix

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Abstrakt AbstractTato praacutece se zabyacutevaacute problemati-

kou automatizovaneacute spraacutevy počiacutetačů soperačniacutem systeacutemem Windows pomociacutetechnologie Puppet Ciacutelem je před-stavit technologii Puppet možnostispraacutevy operačniacuteho systeacutemu Windowsa navrhnout pracovniacute postup diacutekyktereacutemu lze Puppet udržitelně a sys-tematicky provozovat Součaacutestiacute praacuteceje teacutež implementace spraacutevy vybranyacutechzdrojů operačniacuteho systeacutemu Windows vtestovaciacutem prostřediacute

Kliacutečovaacute slova Puppet spraacuteva počiacute-tačoveacute infrastruktury bakalaacuteřskaacute zaacutevě-rečnaacute praacutece

This thesis focuses on how to managecomputer infrastructure with Windowsoperating system using Puppet technol-ogy The goal of this work is to intro-duce Puppet technology various Pup-petrsquos capabilities of Windows manage-ment and to propose workflow for in-frastructure implementation and furthersystematic development This work in-cludes implementation of managementof various Windows resources in test en-vironment

Keywords Puppet computer in-frastructure management bachelor the-sis

Title translation Automatic man-agement of pc laboratory with OSWindows based on Puppet technology

vi

Obsah 1 Uacutevod 111 Osobniacute motivace 1

2 Představeniacute naacutestroje Puppet 221 Co to je CM tool 2

211 Jazyk konfiguračniacutehosouboru 2

212 Styl programovaacuteniacute kon-figurace 2

213 Nastaveniacute klientskeacutehostroje 3

214 Distribučniacute model pull push 3

215 Idempotence 322 Puppet 3

221 Open Source Puppetvs Puppet Enterprise 4

23 Slovniacuteček pojmů z prostřediacutePuppet 4

Agent Node 4Master 4Manifest 4Modul 4Katalog 4

24 Dvě varianty architekturyPuppet infrastruktury 5

25 Zdroje Puppetu jako zaacuteklad-niacute prvky ovlaacutedaacuteniacute systeacutemu 6

26 Podporovaneacute platformy 627 Jak ziacuteskat Puppet 728 Proč jsem vybral Puppet 7

3 Multiplatformniacute Puppet 831 Soubory 832 Uživateleacute a skupiny uživatelů 933 Služby 934 Zaacuteznamy hosts 935 Instalace programů 936 Reboot 937 Spouštěniacute vlastniacuteho přiacutekazu 938 Plaacutenovaneacute uacutelohy 1039 Windows registry 10

310 Active Directory 103101 Spraacuteva Active Directory 103102 Modul domainndash

membership 103103 Modul acl 11

3104 Dalšiacute moduly pro ovlaacute-daacuteniacute prostřediacute Windows 11

4 Testovaacuteniacute 1241 Statickaacute kotrola koacutedu 1242 Unit testy 1243 Akceptačniacute testy 1244 Test Driven Development 13

5 Testovaciacute prostřediacute AWS 1451 Požadavky na virtualizačniacute

platformu 1452 Amazon Web services 1553 Služby AWS 15

531 VPC 15532 EC2 15533 Route53 16

6 Workflow 1761 Spraacuteva externiacutech modulů 17

611 Puppet module 17612 Git Submodule 17613 Puppetfile 17

62 Udržovaacuteniacute konfigurace veverzovaciacutem systeacutemu 18

63 Puppet Environments 1864 r10k 18

7 Implementace 2071 Specifikace uacutelohy 2072 Vyacuteběr technologiiacute 2073 Vyacutevojoveacute prostřediacute 20

731 Psaniacute Puppet koacutedu 23732 Navaacutezaacuteniacute komunikace

agentů s masterem 23733 Nasazeniacute koacutedu na vyacute-

vojoveacute prostřediacute 2374 Vyacuteslednaacute konfigurace 23

741 Modul students 24742 Modul classroomx

programs 24743 Modul classroomx

test 258 Otestovaacuteniacute funkčnosti imple-

mentace 2681 Unit testy 2682 Akceptačniacute testy 2783 Testovaacuteniacute struktury vyacutevojo-

veacuteho prostřediacute 2884 Dedikovaneacute testovaciacute stroje 29

vii

841 Rozděleniacute testů naWindows a Unix 29

85 Test driven development 3086 Vyacutesledky testů 30

861 Vyacutesledky testů siacuteťoveacuteinfrastruktury 30

862 Vyacutesledky testů testo-vaciacutech strojů 31

863 Vyacutesledky testů agentů 31864 Ukaacutezka reportovaciacuteho

naacutestroje rspec 319 Zaacutevěr 34

Literatura 35A Slovniacuteček 39

viii

Tabulky Obraacutezky81 Vyacutesledky unit testů modulu

awsvpc 3082 Vyacutesledky akceptačniacutech testů

modulu awsvpc 3183 Vyacutesledky akceptačniacutech tes-

tů modulu awsvpc ndash siacuteťovaacutekomunikace 31

84 Vyacutesledky akceptačniacutech testůkonfigurace testovaciacutech strojů 31

85 Vyacutesledky unit testů modulustudents 32

86 Vyacutesledky unit testů moduluclassroomtest 32

87 Vyacutesledky unit testů moduluclassroomprograms 32

88 Vyacutesledky akceptačniacutech testůPuppet agentů 33

21 Komunikace mezi puppetagentem a masterem 5

22 Zdroje puppet 623 Obliacutebenost CM naacutestrojů 771 Diagram vyacutevojoveacuteho prostře-

diacute v AWS 2181 Report běhu rspec testu 33

ix

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Obsah 1 Uacutevod 111 Osobniacute motivace 1

2 Představeniacute naacutestroje Puppet 221 Co to je CM tool 2

211 Jazyk konfiguračniacutehosouboru 2

212 Styl programovaacuteniacute kon-figurace 2

213 Nastaveniacute klientskeacutehostroje 3

214 Distribučniacute model pull push 3

215 Idempotence 322 Puppet 3

221 Open Source Puppetvs Puppet Enterprise 4

23 Slovniacuteček pojmů z prostřediacutePuppet 4

Agent Node 4Master 4Manifest 4Modul 4Katalog 4

24 Dvě varianty architekturyPuppet infrastruktury 5

25 Zdroje Puppetu jako zaacuteklad-niacute prvky ovlaacutedaacuteniacute systeacutemu 6

26 Podporovaneacute platformy 627 Jak ziacuteskat Puppet 728 Proč jsem vybral Puppet 7

3 Multiplatformniacute Puppet 831 Soubory 832 Uživateleacute a skupiny uživatelů 933 Služby 934 Zaacuteznamy hosts 935 Instalace programů 936 Reboot 937 Spouštěniacute vlastniacuteho přiacutekazu 938 Plaacutenovaneacute uacutelohy 1039 Windows registry 10

310 Active Directory 103101 Spraacuteva Active Directory 103102 Modul domainndash

membership 103103 Modul acl 11

3104 Dalšiacute moduly pro ovlaacute-daacuteniacute prostřediacute Windows 11

4 Testovaacuteniacute 1241 Statickaacute kotrola koacutedu 1242 Unit testy 1243 Akceptačniacute testy 1244 Test Driven Development 13

5 Testovaciacute prostřediacute AWS 1451 Požadavky na virtualizačniacute

platformu 1452 Amazon Web services 1553 Služby AWS 15

531 VPC 15532 EC2 15533 Route53 16

6 Workflow 1761 Spraacuteva externiacutech modulů 17

611 Puppet module 17612 Git Submodule 17613 Puppetfile 17

62 Udržovaacuteniacute konfigurace veverzovaciacutem systeacutemu 18

63 Puppet Environments 1864 r10k 18

7 Implementace 2071 Specifikace uacutelohy 2072 Vyacuteběr technologiiacute 2073 Vyacutevojoveacute prostřediacute 20

731 Psaniacute Puppet koacutedu 23732 Navaacutezaacuteniacute komunikace

agentů s masterem 23733 Nasazeniacute koacutedu na vyacute-

vojoveacute prostřediacute 2374 Vyacuteslednaacute konfigurace 23

741 Modul students 24742 Modul classroomx

programs 24743 Modul classroomx

test 258 Otestovaacuteniacute funkčnosti imple-

mentace 2681 Unit testy 2682 Akceptačniacute testy 2783 Testovaacuteniacute struktury vyacutevojo-

veacuteho prostřediacute 2884 Dedikovaneacute testovaciacute stroje 29

vii

841 Rozděleniacute testů naWindows a Unix 29

85 Test driven development 3086 Vyacutesledky testů 30

861 Vyacutesledky testů siacuteťoveacuteinfrastruktury 30

862 Vyacutesledky testů testo-vaciacutech strojů 31

863 Vyacutesledky testů agentů 31864 Ukaacutezka reportovaciacuteho

naacutestroje rspec 319 Zaacutevěr 34

Literatura 35A Slovniacuteček 39

viii

Tabulky Obraacutezky81 Vyacutesledky unit testů modulu

awsvpc 3082 Vyacutesledky akceptačniacutech testů

modulu awsvpc 3183 Vyacutesledky akceptačniacutech tes-

tů modulu awsvpc ndash siacuteťovaacutekomunikace 31

84 Vyacutesledky akceptačniacutech testůkonfigurace testovaciacutech strojů 31

85 Vyacutesledky unit testů modulustudents 32

86 Vyacutesledky unit testů moduluclassroomtest 32

87 Vyacutesledky unit testů moduluclassroomprograms 32

88 Vyacutesledky akceptačniacutech testůPuppet agentů 33

21 Komunikace mezi puppetagentem a masterem 5

22 Zdroje puppet 623 Obliacutebenost CM naacutestrojů 771 Diagram vyacutevojoveacuteho prostře-

diacute v AWS 2181 Report běhu rspec testu 33

ix

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

841 Rozděleniacute testů naWindows a Unix 29

85 Test driven development 3086 Vyacutesledky testů 30

861 Vyacutesledky testů siacuteťoveacuteinfrastruktury 30

862 Vyacutesledky testů testo-vaciacutech strojů 31

863 Vyacutesledky testů agentů 31864 Ukaacutezka reportovaciacuteho

naacutestroje rspec 319 Zaacutevěr 34

Literatura 35A Slovniacuteček 39

viii

Tabulky Obraacutezky81 Vyacutesledky unit testů modulu

awsvpc 3082 Vyacutesledky akceptačniacutech testů

modulu awsvpc 3183 Vyacutesledky akceptačniacutech tes-

tů modulu awsvpc ndash siacuteťovaacutekomunikace 31

84 Vyacutesledky akceptačniacutech testůkonfigurace testovaciacutech strojů 31

85 Vyacutesledky unit testů modulustudents 32

86 Vyacutesledky unit testů moduluclassroomtest 32

87 Vyacutesledky unit testů moduluclassroomprograms 32

88 Vyacutesledky akceptačniacutech testůPuppet agentů 33

21 Komunikace mezi puppetagentem a masterem 5

22 Zdroje puppet 623 Obliacutebenost CM naacutestrojů 771 Diagram vyacutevojoveacuteho prostře-

diacute v AWS 2181 Report běhu rspec testu 33

ix

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Tabulky Obraacutezky81 Vyacutesledky unit testů modulu

awsvpc 3082 Vyacutesledky akceptačniacutech testů

modulu awsvpc 3183 Vyacutesledky akceptačniacutech tes-

tů modulu awsvpc ndash siacuteťovaacutekomunikace 31

84 Vyacutesledky akceptačniacutech testůkonfigurace testovaciacutech strojů 31

85 Vyacutesledky unit testů modulustudents 32

86 Vyacutesledky unit testů moduluclassroomtest 32

87 Vyacutesledky unit testů moduluclassroomprograms 32

88 Vyacutesledky akceptačniacutech testůPuppet agentů 33

21 Komunikace mezi puppetagentem a masterem 5

22 Zdroje puppet 623 Obliacutebenost CM naacutestrojů 771 Diagram vyacutevojoveacuteho prostře-

diacute v AWS 2181 Report běhu rspec testu 33

ix

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 1Uacutevod

V teacuteto praacuteci představiacutem způsob jak pomociacute Infrastructure as Code (IaC) spravovat po-čiacutetačovou infrastrukturu Představiacutem naacutestroj Puppet jako naacutestroj IaC pro automatizacikonfigurace a kraacutetce srovnaacutem vybraneacute alternativniacute naacutestroje

V dalšiacute čaacutesti praacutece podrobně rozeberu možnosti Puppetu pro konfiguraci operačniacutehosysteacutemu Windows V prostřediacute Windows existujiacute nativniacute naacutestroje pro spraacutevu konfigu-race ndash zejmeacutena domeacutena Active Directory a Powershell DSC Puppet zde představujezajiacutemavou opensource alternativu

V samostatneacute kapitole se budu věnovat problematice automatickyacutech testů ProtožePuppet využiacutevaacute konfiguraci definovanou pomociacute zdrojoveacuteho koacutedu lze tento koacuted velmipečlivě testovat na různyacutech uacuterovniacutech

Nakonec představiacutem konkreacutetniacute implementaci konfigurace v testovaciacutem prostřediacute

11 Osobniacute motivaceNejprve se musiacutem přiznat že jsem dušiacute programaacutetor - nikoliv systeacutemovyacute administraacute-tor Proto mě teacutema IaC velice zaujalo jako způsob jak vneacutest programaacutetorskeacute naacutevykydo světa konfigurace počiacutetačů Jako programaacutetoři se snažiacuteme do našiacute praacutece zanaacutešetstandardy Učiacuteme se naacutevrhoveacute vzory učiacuteme se pomociacute agilniacutech vyacutevojovyacutech metod leacutepea efektivněji doručovat software našim zaacutekazniacutekům učiacuteme se pomociacute automatickyacutechtestů kontrolovat kvalitu softwaru učiacuteme se pomociacute refaktoru naacuteš software vylepšovatTo vše můžeme pomociacute IaC použiacutet i při konfiguraci počiacutetačoveacute infrastruktury

1

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 2Představeniacute naacutestroje Puppet

Puppet je naacutestroj pro spraacutevu konfigurace ndash v anglicky psaneacute literatuře se takoveacute naacutestrojeoznačujiacute jako CM Tools nebo CCA tools

Takovyacutech naacutestrojů je celaacute řada a v teacuteto kapitole bych čtenaacuteře raacuted seznaacutemil s obecnyacutemivlastnostmi těchto naacutestrojů a takeacute s odlišnostmi diacuteky kteryacutem si můžeme vybrat naacutestrojpřesně podle našich požadavků

21 Co to je CM toolNaacutestroje pro spraacutevu konfigurace lze obecně charakterizovat jako programy ktereacute pomociacutekonfiguračniacuteho souboru provaacutedějiacute změny konfigurace na vzdaacutelenyacutech strojiacutech Takovyacutechprogramů je celaacute řada a obecně nelze řiacuteci kteryacute je lepšiacute nebo horšiacute Je třeba vždy uvaacutežitvyacuteběr naacutestroje pro konkreacutetniacute použitiacute V naacutesledujiacuteciacutech podkapitolaacutech uvedu zaacutekladniacuterozdiacutely mezi zmiacuteněnyacutemi programy

Lišiacute se samozřejmě v jazyku tohoto konfiguračniacuteho souboru daacutele se mohou lišit vsysteacutemu distribuce konfigurace na ovlaacutedaneacute stroje a takeacute ve způsobu jak konfiguracina ovlaacutedanyacutech strojiacutech aplikujiacute

211 Jazyk konfiguračniacuteho souboruPři vyacuteběru konfiguračniacuteho naacutestroje si zaacuteroveň vybiacuteraacuteme v jakeacutem jazyce budeme psaacutetvlastniacute konfiguraci Každyacute naacutestroj vychaacuteziacute z nějakeacuteho tradičniacuteho programovaciacuteho ja-zyka namaacutetkouPuppet Chef [1] - RubyAnsible - Python

Při vyacuteběru vhodneacuteho naacutestroje se tedy můžeme řiacutedit našiacute preferenciacute daneacuteho progra-movaciacuteho prostřediacute

212 Styl programovaacuteniacute konfiguraceCM tools naacutem daacutevaji na vyacuteběr mezi dvěma styly programovaacuteniacutedeklarativniacute programovaacuteniacute - řiacutekaacuteme jak maacute vypadat stroj po aplikovaacuteniacute konfigurace

(napřiacuteklad Puppet) imperativniacute programovaacuteniacute - řiacutekaacuteme co maacute stroj udělat aby požadovaneacute konfiguracedosaacutehl (napřiacuteklad Chef)

Nutno podotknout že mezi těmito styly programovaacuteniacute neniacute jeden lepšiacute než druhyacuteJde o osobniacute preferenci administraacutetora v jakeacutem stylu se mu bude leacutepe uvažovat [2]

2

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

22 Puppet

213 Nastaveniacute klientskeacuteho strojeOvlaacutedanyacute stroj musiacute byacutet vždy nějak nastaven aby se k němu mohl CM tool připojit akomunikovat s niacutem Rozdiacutely jsou zejmeacutena v rozsahu tohoto prvotniacuteho nastaveniacute Puppetvyžaduje na ovlaacutedaneacutem stroji nainstalovanyacute svůj klientskyacute program puppet zatiacutemconapřiacuteklad naacutestroj Ansible si vystačiacute s prostyacutem ssh připojeniacutem a na ovlaacutedaneacutem strojižaacutednyacute klientskyacute software nepotřebuje [3]

Tyto rozdiacutely určujiacute zejmeacutena počaacutetečniacute investici do zavedeniacute automatizovaneacute in-frastruktury ndash některeacute naacutestroje jsou komplikovanějšiacute na instalaci než jineacute

214 Distribučniacute model pull pushMaacuteme na vyacuteběr ze dvou zaacutekladniacutech distribučniacutech modelů V obou existuje centraacutelniacuteprvek kteryacute obsahuje připravenou konfiguraci prostřediacutePush model - centraacutelniacute prvek saacutem aktivně ovlaacutedaacute klientskeacute stroje a přikazuje jim

aby provedly konfiguraci (přiacuteklad Ansible ve vyacutechoziacutem nastaveniacute) Zajiacutemaveacute na tomtomodelu je že musiacute byacutet dopředu jasneacute jakeacute stroje se budou konfigurace uacutečastnit Jinakby centraacutelniacute prvek nevěděl jakeacute stroje maacute ovlaacutedatPull model - o konfiguraci žaacutedajiacute klientskeacute stroje a centraacutelniacute prvek je na vyžaacutedaacuteniacuteobsluhuje (přiacuteklad Puppet) Narozdiacutel od pull modelu zde centraacutelniacute prvek nepotřebujedopředu vědět jakeacute konkreacutetniacute stroje bude konfigurovat

215 IdempotenceVšechny zde zmiacuteněneacute konfiguračniacute naacutestroje včetně Puppetu aplikujiacute změny konfigu-race idempotentně Tedy opakovanou aplikaciacute konfigurace se stav ovlaacutedaneacuteho strojenezměniacute [4]

Uvažujme napřiacuteklad tuto konfiguraci souboru v jazyku Puppet

file rsquoctempfiletxtrsquoensure =gt presentcontent =gt generated by puppet manifest

Zdroj file neřiacutekaacute že se bude soubor filetxt vytvaacuteřet ale že je třeba zařiacutedit aby vsouboroveacutem systeacutemu byl na určeneacute cestě a se zadanyacutem obsahem To sice může znamenatže bude soubor vytvořen (pokud chybiacute) ale takeacute to může znamenat že se existujiacuteciacutemusouboru změniacute obsah nebo se dokonce nestane vůbec nic (pokud soubor popisu jižodpoviacutedaacute) Povšimněme si parametru ensure ndash tiacutem pouze deklarujeme požadovanyacutestav souboru a nemusiacuteme řešit přesnyacute postup jak se tohoto stavu dosaacutehne

Na zachovaacuteniacute idempotence konfigurace musiacuteme myslet zejmeacutena pokud budeme chtiacutetkonfiguračniacute naacutestroj rozšiřovat o naše vlastniacute funkce nebo pokud budeme potřebovatproveacutest nějakyacute vlastniacute přiacutekaz (zdroj Puppetu exec) V takoveacutem přiacutepadě totiž musiacutemesami zajistit implementaci deklarativniacuteho vyjaacutedřeniacute konfigurace

Vyacuteše zmiacuteněnyacute přiacuteklad v jazyke Puppet je pouze ilustračniacute ndash u ostatniacutech CM naacutestrojůlůje přiacutestup k idempotenci obdobnyacute [5]

22 PuppetPuppet je program pro spraacutevu konfigurace počiacutetačovyacutech systeacutemů Byl vytvořen firmouPuppetLabs v roce 2005 Je napsaacuten v jazyce Ruby a pro psaniacute konfigurace se použiacutevaacutezvlaacuteštniacute DSL jazyk [6] vychaacutezejiacuteciacute praacutevě z ruby

3

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

2 Představeniacute naacutestroje Puppet 221 Open Source Puppet vs Puppet Enterprise

Puppet je vydaacutevaacuten ve dvou verziacutech ndash Open Source Puppet a Puppet Enterprise [7]Zaacutekladniacute verze Puppetu je dostupnaacute pod opensource licenciacute [8] V teacuteto verzi je obsaženavlastniacute implementace jazyka Puppet a všechny nutneacute naacutestroje ke zprovozněniacute Puppetinfrastruktury Veškeryacute popis jazyka prostřediacute i praktickeacute ukaacutezky v teacuteto praacuteci se tyacutekajiacutepraacutevě varianty Open Source Puppet

Jako komerčniacute variantu nabiacuteziacute firma PuppetLabs soubor programů Puppet Enter-prise kteryacute nad raacutemec opensource verze nabiacuteziacute různeacute užitečneacute naacutestroje na zpřiacutejemněniacutea zefektivněniacute použitiacute Puppetu Enterprise verze nabiacuteziacute napřiacuteklad rozsaacutehlejšiacute instalačniacuteprogram nabiacuteziacute připraveneacute grafickeacute rozhraniacute na ovlaacutedaacuteniacute Puppetu reporting o běhuPuppetu a samozřejmě profesionaacutelniacute podporu Kompletniacute vyacutečet nabiacutezenyacutech funkciacute pla-ceneacute verze najdeme na oficiaacutelniacutem webu [9]

23 Slovniacuteček pojmů z prostřediacute Puppet

Agent NodeStroj zapojenyacute do Puppet infrastruktury kteryacute chceme konfigurovat Umiacute konfiguro-vat saacutem sebe pomociacute puppet apply a umiacute se spojit s masterem v raacutemci komunikaceagent - master

MasterStroj zapojenyacute do Puppet infrastruktury kteryacute pro agenty připravuje zkompilovanyacutekatalog

ManifestSoubor s koacutedem Puppetu Obsahuje vlastniacute definici konfigurace

ModulModul je znovupoužitelnaacute kolekce manifestů Obsahuje definice typů virtuaacutelniacutech zdrojůPuppetu soubory a šablony pro běh přiacuteslušneacute konfigurace

Je to kontejner kteryacute zapouzdřuje nějakou samostatnou ucelenou konfiguraci Je tonapřiacuteklad modul pro konfiguraci Apache serveru [10] nebo konfigurace apt [11] pro-gramu v operačniacutem systeacutemu Debian

Moduly si můžeme naprogramovat vlastniacute nebo můžeme využiacutet již připravenyacutech ofici-aacutelniacutech i neoficiaacutelniacutech modulů Oficiaacutelniacute zdroj pro distribuci veřejně dostupnyacutech modulůje portaacutel httpsforgepuppetcom Můžeme zde vyhledaacutevat zveřejněneacute moduly apo přihlaacutešeniacute takeacute vlastniacute moduly nabiacutezet k použitiacute ostatniacutem Nejsme ale zaacutevisliacute jen natomto oficiaacutelniacutem zdroji ndash můžeme moduly hledat napřiacuteklad na httpsgithubcomnebo je udržovat ve vlastniacutem soukromeacutem repositaacuteři Moduly jsou nakonec jen zdrojoveacutesoubory takže nejsme omezeni žaacutednyacutem proprietaacuterniacutem distribučniacutem kanaacutelem

KatalogVyacuteslednaacute konfigurace kteraacute se aplikuje na ovlaacutedanyacute stroj Typicky se jednaacute o kombinacikonfiguraciacute mnoha manifestů V katalogu jsou umiacutestěny všechny virtuaacutelniacute zdroje z přiacute-slušnyacutech manifestů uspořaacutedaneacute do orientovaneacuteho acyklickeacuteho grafu Toto uspořaacutedaacuteniacuteurčuje pořadiacute aplikace jednotlivyacutech zdrojů

4

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

24 Dvě varianty architektury Puppet infrastruktury

Obraacutezek 21 Komunikace mezi Puppet Agentem a Masterem Obraacutezek převzat z [13]

24 Dvě varianty architektury Puppet infrastruktury

Puppet nabiacuteziacute dva zaacutekladniacute způsoby použitiacute Puppet apply a komunikaciagent - master

V přiacutepadě puppet apply se Puppet spouštiacute přiacutemo na konfigurovaneacutem stroji (a žaacutednyacutejinyacute stroj neniacute třeba) Nejprve je třeba na stroj nějakyacutem způsobem nahraacutet soubory sPuppet konfiguraciacute a poteacute pomociacute přiacutekazu

puppet apply

spustiacuteme běh konfigurace [12]Varianta agent - master je určena pro konfiguraci mnoha strojů najednou Stroje

v infrastruktuře jsou rozděleny na dva typy ndash ovlaacutedaneacutemu stroji řiacutekaacuteme Puppet Agenta ovlaacutedajiacuteciacutemu stroji řiacutekaacuteme Puppet Master

Na obraacutezku 21 je znaacutezorněna komunikace mezi agentem a masterem V bodě 1)zahaacutejiacute agent komunikaci navaacutezaacuteniacutem spojeniacute s masterem Předaacute mu o sobě množstviacuteinformaciacute na zaacutekladě kteryacutech Puppet Master vygeneruje katalog s konfiguraciacute V bodě2) posiacutelaacute master agentovi zpracovanyacute katalog s konfiguraciacute ndash agent se ho ihned pokusiacutespustit Po aplikaci konfigurace z katalogu agent v bodě 3) posiacutelaacute masterovi vyacutestupz provedenyacutech operaciacute Tento vyacutestup lze pomociacute naacutestrojů z edice Puppet Enterprisedaacutele zpracovaacutevat a napřiacuteklad zobrazovat v grafickeacutem rozhraniacute pro operaacutetora

5

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

2 Představeniacute naacutestroje Puppet 25 Zdroje Puppetu jako zaacutekladniacute prvky ovlaacutedaacuteniacutesysteacutemu

Zdroje (resources) jsou zaacutekladniacute entity se kteryacutemi pracujeme při programovaacuteniacute v Pup-petu Puppet se naacutes snažiacute odstiacutenit od konkreacutetniacute implementace reaacutelnyacutech zdrojů operač-niacuteho systeacutemu Použiacutevaacute pro to praacutevě zdroje ktereacute jsou pro různeacute platformy implemen-tovaacuteny providery

Obraacutezek 22 Zdroje puppet

Puppet nabiacuteziacute abstrakce napřiacuteklad pro praacuteci se soubory uživateli systeacutemovyacutemi služ-bami plaacutenovanyacutemi uacutelohami a mnoha dalšiacutemi Kompletniacute vyacutečet standardniacutech zdrojůnalezneme na oficiaacutelniacutech straacutenkaacutech [14] Naviacutec vybraneacute zdroje ktereacute se tyacutekajiacute ovlaacutedaacuteniacuteoperačniacutech systeacutemů Windows podrobněji popiacutešu ve zvlaacuteštniacute kapitole

26 Podporovaneacute platformyPuppet agent je možneacute provozovat na nejrůznějšiacutech Unix platformaacutech včetně Mac OSa na moderniacutech verziacutech operačniacuteho systeacutemu Windows (verze pro pracovniacute stanice iservery) [15] Kompletniacute podporovaneacute verze nalezneme na oficiaacutelniacutech straacutenkaacutech [16]

Pro provozovaacuteniacute Puppet Serveru (Puppet Master) je vyacuteběr platforem vyacuterazně menšiacuteJe nutneacute použiacutet Unix ndash a to jeden z těchto [17]Red Hat Enterprise LinuxRHEL-derived distrosFedoraDebianUbuntu

6

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

27 Jak ziacuteskat Puppet

27 Jak ziacuteskat PuppetNa Unix platformaacutech lze najiacutet oficiaacutelniacute verzi Puppetu i Puppet Serveru v přiacuteslušneacutem ba-liacutekovaciacutem naacutestroji Pro Windows jsou připraveny ke staženiacute msi instalačniacute soubory [18]

28 Proč jsem vybral PuppetPuppet je jedniacutem z nejpoužiacutevanějšiacutech [19] naacutestrojů pro automatizaci konfigurace počiacute-tačoveacute infrastruktury

Obraacutezek 23 Obliacutebenost CM naacutestrojů Obraacutezek převzat z [19]

Maacute velmi propracovanyacute vlastniacute dsl jazyk založenyacute na Ruby syntaxi ndash v kapitole im-plementace předvedu jak je tento dsl jazyk pohodlnyacute diacuteky jeho deklarativniacute povazeProgramovaacuteniacute konfigurace Puppetu použiacutevaacute deklarativniacute přiacutestup a pro komplikovanějšiacuteinfrastrukturu mi osobně přijde deklarativniacute model přehlednějšiacute Je to možnaacute tiacutem žejsem zvyklyacute na funkcionaacutelniacute programovaacuteniacute ktereacute praacutevě deklarativniacute přiacutestup hojně vy-užiacutevaacute Uacuteloha konfigurace se pro deklarativniacute způsob vyacutevoje dle meacuteho naacutezoru velicehodiacute protože konfigurace systeacutemu je nakonec praacutevě popis zamyacutešleneacuteho stavu počiacutetačo-veacuteho systeacutemu ndash nikoliv algoritmus kteryacutem se ke stavu dostaneme Samozřejmě pokudbych měl představovat konfiguračniacute naacutestroje celeacutemu vyacutevojoveacutemu tyacutemu ve ktereacutem jsouvyacutevojaacuteři zvykliacute vyacutehradně na imperativniacute programovaacuteniacute Puppet bych patrně nezvolil

Nejčastějšiacute distribučniacute model Puppetu je pull varianta v podobě agent - masterkomunikace Lze ale použiacutet i variantu puppet apply kteraacute obejde centraacutelniacute prvek Puppetinfrastruktury a dociacutelit tiacutem distribučniacute varianty push ndash Puppet tedy nabiacuteziacute to nejlepšiacutez obou modelů

Protože ciacutelem praacutece je spraacuteva strojů s Windows je důležitaacute i velice dobraacute podporaPuppetu praacutevě pro tuto skupinu operačniacutech systeacutemů Jak Puppet umiacute s Windows pra-covat uvedu ve zvlaacuteštniacute kapitole

7

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 3Multiplatformniacute Puppet

Puppet podporuje mnoho operačniacutech systeacutemů z rodiny Unix a takeacute vybraneacute typy Win-dows [16] Pokud to alepsoň trochu jde snažiacute se Puppet použiacutevat stejneacute vyacuterazoveacute pro-středky na obou platformaacutech Pro administraacutetora je tedy vyacutehodneacute že mnoheacute naacutevrhoveacutevzory konfigurace může uplatnit na obou platformaacutech a leacutepe zuacuteročit čas kteryacute věnovalučeniacute se Puppetu

Zaacutekladniacute stavebniacute kameny systeacutemu Puppet jsou nejrůznějšiacute zdroje ndash resources [14]Tyto zdroje jsou implementovaacuteny pomociacute providerů na konkreacutetniacutech podporovanyacutechplatformaacutech a pro administraacutetora je tedy připravena přiacutejemnaacute abstrakce nad ovlaacutedaciacutemiprvky systeacutemu Napřiacuteklad zdroj ovlaacutedajiacuteciacute soubory ndash file ndash existuje jak pro Unix takpro Windows Lišiacute se praacutevě v implementaci provideru protože se soubory na Unixu sezachaacuteziacute jinak než na Windows

Samozřejmě takovaacute abstrakce nezvlaacutedne plně odstiacutenit typ operačniacuteho systeacutemu ale jepřiacutejemneacute spravovat Unix i Windows podobnyacutemi vyjadřovaciacutemi prostředky

V naacutesledujiacuteciacutech kapitolaacutech bych raacuted čtenaacuteře seznaacutemil s vybranyacutemi zdroji Puppetu azejmeacutena upozornil v čem se lišiacute chovaacuteniacute Unixoveacute a Windows verze [20ndash21]

31 SouboryZdroj pro ovlaacutedaacuteniacute souborů se na obou platformaacutech jmenuje file Společneacute pro oběplatformy je možnost nastavovaacuteniacute jmeacutena cesty obsahu a přiacutestupovyacutech praacutev souboruKaždyacute z těchto parametrů se ale lišiacute možnostmi ktereacute jednotliveacute operačniacute systeacutemynabiacuteziacute jmeacuteno souboru narozdiacutel od Unixu Windows nerozlišuje mezi velkyacutemi a malyacutemi piacutes-

meny Puppet toto nijak neupravuje a nechaacutevaacute řešeniacute na administraacutetorovi lomiacutetka v cestě souboru Na platformě Windows Puppet automaticky upravuje lo-miacutetka na spraacutevnou variantuPřiacutestupovaacute praacuteva Primaacuterně se použiacutevaacute verze opraacutevněniacute pro linux ndash tedy praacuteva voktaloveacute notaci pro vlastniacuteka skupinu a ostatniacute Windows verze tato opraacutevněniacute takeacutedokaacuteže zpracovat a namapuje je na vlastniacute pojetiacute opraacutevněniacute Pro podrobnějšiacute spraacutevuopraacutevněniacute k souborům a adresaacuteřům však potřebujeme specializovaneacute moduly jako jenapřiacuteklad puppetlabsacl [22] modulKonce řaacutedků tradičniacutemu probleacutemu při multiplatformniacute komunikaci se nevyhnemeani v přiacutepadě Puppetu Probleacutem je zejmeacutena to že v přiacutepadě spraacutevy Windows spoluvždy komunikuje Puppet Agent a Master přitom Master nutně musiacute byacutet Unixovyacutesysteacutem Pro přenos obsahu souborů tedy musiacuteme byacutet velice obezřetniacute a uchovaacutevatna Puppet Masteru řetězce a šablony souborů se spraacutevnyacutemi konci řaacutedků Obecneacutepravidlo je že přenos souborů Puppet provaacutediacute binaacuterně ndash tedy zachovaacutevaacute konce řaacutedkůtakoveacute jakeacute jsou uloženeacute u Puppet Mastera U jinyacutech zdrojů ktereacute mohou upravo-vat obsah textovyacutech souborů (napřiacuteklad hosts zaacuteznamy) se většinou automatickypoužijiacute spraacutevneacute konce řaacutedků daneacuteho agenta Vše je třeba konzultovat s manuaacutelovyacutemistraacutenkami modulů

8

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

32 Uživateleacute a skupiny uživatelů

32 Uživateleacute a skupiny uživatelůPro ovlaacutedaacuteniacute uživatelů a skupin existuje opět společnyacute zdroj Puppetu user resp groupPro Windows je třeba zmiacutenit že umiacute ovlaacutedat pouze lokaacutelniacute uživatele nikoliv uživateleActive Directory ndash k tomu budeme opět potřebovat zvlaacuteštniacute modul

33 SlužbyPro obě platformy existuje zdroj jmeacutenem service Lišiacute se v parametrech pomociacute kteryacutechse služby ovlaacutedajiacute Obě platformy majiacute zaacutekladniacute parametr zda maacute byacutet služba spuštěnači zastavena Unixovaacute varianta umožňuje určit startstop skripty zatiacutemco u Windows sivoliacuteme startup type [23] ndash parametr udaacutevajiacuteciacute zda maacute byacutet služba spouštěna automatickyči ručně

34 Zaacuteznamy hostsOvlaacutedaacuteniacute zaacuteznamů hosts je pro Unix i pro Windows stejneacute ndash lišiacute se pouze vnitřniacuteimplementace jak a kam se zaacuteznamy zapisujiacute

35 Instalace programůSpraacuteva programů je mezi Unixy a Windows na prvniacute pohled naprosto odlišnaacute - kupodivuale takeacute použiacutevaacute stejnyacute zdroj na obou platformaacutech Rozdiacutel prameniacute zejmeacutena z toho že naUnixu v drtiveacute většině přiacutepadů maacuteme nějakeacuteho spraacutevce instalovanyacutech programů (aptyum apod) Ve standardniacute instalaci Windows však žaacutednyacute takovyacute spraacutevce neniacute Musiacutemetedy sami zajistit aby měly Windows přiacutestup k instalačniacutemu exe nebo msi souboru apoteacute ho pomociacute instalačniacutech parametrů korektně nainstalovat Distribuci instalačniacutehosouboru můžeme zařiacutedit různyacutemi způsoby Můžeme namapovat siacuteťovyacute disk můžemesoubor staacutehnout na disk agenta a po instalaci ho vymazat Obě tato řešeniacute ale zdalekanejsou tak pohodlnaacute jako spraacutevci baliacuteků v přiacutepadě Unixu

Pro Windows ovšem existuje jistaacute alternativa k bdquoručniacutemuldquo stahovaacuteniacute programů Jeto aplikace chocolatey [24] kteraacute pro Windows představuje to co pro Debian apt nebopro Fedoru yum Jednaacute se o baliacutečkovaciacute systeacutem pro Windows a Puppet s niacutem umiacute diacutekyzvlaacuteštniacutemu provideru pracovat [25] Nevyacutehoda ovšem je že tato aplikace neniacute v čisteacuteinstalaci Windows

36 RebootPřiacutemo navaacutežeme na předchoziacute kapitolu o instalaci programů Na Windows je mnohoprogramů ktereacute nutně vyžadujiacute po instalaci restart systeacutemu ndash to ve světě Unixu vpodstatě neznaacuteme Nicmeacuteně komunita Puppetu se tiacutem nenechala zastrašit a připravilamodul pro restart systeacutemu Pomociacute obvyklyacutech metod řazeniacute aplikovaacuteniacute Puppet zdrojůmůžeme napřiacuteklad v Puppetu určit že po instalaci všech programů z manifestu se maacutestroj restartovat nebo napřiacuteklad k restartu systeacutemu maacute dojiacutet před instalaciacute vybraneacutehoprogramu

37 Spouštěniacute vlastniacuteho přiacutekazuPro obě platformy se vlastniacute skripty spouštiacute obdobně zdrojem exec U Windows existujezvlaacuteštniacute provider powershell pomociacute ktereacuteho můžeme přiacutemo při běhu Puppetu spustitkoacuted v programu powershell

9

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

3 Multiplatformniacute Puppet 38 Plaacutenovaneacute uacutelohy

Zde se verze Windows od Unixů lišiacute viacutece Unix maacute na spouštěniacute opakovanyacutech plaacutenova-nyacutech uacuteloh program cron ndash tak se takeacute jmenuje zdroj Puppetu kteryacute tyto uacutelohy ovlaacutedaacuteWindows ovšem cron nemaacute a tak se jeho zdroj pro spouštěniacute opakovanyacutech uacuteloh odlišujenaacutezvem i formou ndash scheduled_task

39 Windows registryJedniacutem z důležityacutech rozdiacutelů mezi spraacutevou Windows a Unixu je forma uchovaacutevaacuteniacute kon-figurace v systeacutemu Unix je silně orientovanyacute na soubory a pro většinu konfiguraciacutepoužiacutevaacute praacutevě soubory Z pohledu Puppetu je to velice přiacutejemnaacute věc protože zdroj naovlaacutedaacuteniacute souborů už maacute a nemusiacute proto vytvaacuteřet dalšiacute pro nastavovaacuteniacute programů a slu-žeb U Windows je situace jinaacute a pro konfiguraci se v drtiveacute většině přiacutepadů použivajiacuteWindows registry

Puppet pro ovlaacutedaacuteniacute registry připravil vlastniacute modul pomociacute ktereacuteho lze přidaacutevat aodebiacuterat kliacuteče z registry a samozřejmě takeacute upravovat typy a hodnoty zaacuteznamů

Kromě samotneacute konfigurace se Windows registry velice hodiacute pro ziacuteskaacutevaacuteniacute informaciacute osysteacutemu Toho Puppet využiacutevaacute v programu facter [26] pomociacute ktereacuteho se může Puppetrozhodovat v manifestech co přesně na systeacutemu vykonaacute Pro facter si můžeme psaacutet inaše vlastniacute funkce a v přiacutepadě Windows jsou praacutevě registry velice vhodnaacute knihovnainformaciacute

310 Active DirectoryPro systeacutem Windows existuje tradičniacute naacutestroj pro spraacutevu entit v siacuteti ndash Active Directory(AD) Zaměřeniacute tohoto naacutestroje je tedy podobneacute jako naacutestroje Puppet Bylo by ovšemnerozumneacute považovat Puppet za nesmiřitelnou konkurenci pro AD Puppet by měl vtakoveacutem soupeřeniacute velikou nevyacutehodu protože je to mnohem mladšiacute systeacutem a muselby přesvědčit spraacutevce počiacutetačovyacutech siacutetiacute aby opustili zavedeneacute a vyzkoušeneacute řešeniacute ADa dali přednost praacutevě Puppetu Nezapomeňme že za AD stojiacute obrovskaacute mezinaacuterodniacutekorporace a soupeřeniacute s niacute by tedy jistě nebylo jednoducheacute [27]

Dle meacuteho naacutezoru je mnohem zajiacutemavějšiacute nabiacutednout staacutevajiacuteciacutem uživatelům AD naacutestrojkteryacutem AD mohou spravovat ndash nikoliv naacutehradu ale užitečnyacute doplněk A přesně k tomusloužiacute naacutesledujiacuteciacute Puppet moduly pro ovlaacutedaacuteniacute Active Directory

3101 Spraacuteva Active DirectoryModul pro spraacutevu vlastniacuteho Active Directory je k dispozici v repositaacuteři forgepuppetcom pod naacutezvem jriviereWindows_ad [28] Tento modul nabiacuteziacute zaacutekladniacute spraacutevu AD instalace AD a konfigurace zaacutekladniacutech parametrů spraacuteva uživatelskyacutech skupin spraacuteva uživatelů a jejich zařazeniacute do skupin spraacuteva organizačniacutech jednotek

3102 Modul domainndashmembershipModul trlinkindomain_membership [29] sloužiacute k zařazovaacuteniacute strojů do domeacuteny spra-vovaneacute pomociacute AD (domain membership)

Pomociacute zadaneacuteho uživatele s opraacutevněniacutem přidaacutevat strojedo domeacuteny umožniacute pro strojurčit konkreacutetniacute domeacutenu a parametry pro připojeniacute [30]

10

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

310 Active Directory

3103 Modul aclPro spraacutevu přiacutestupovyacutech opraacutevněniacute ke zdrojům operačniacuteho systeacutemu pomociacute ACL (accesscontrol list [31]) sloužiacute modul puppetlabsacl [22]

Přiacuteklad použitiacute modulu

acl rsquoctemppermsrsquopermissions =gt [ identity =gt rsquoAdministratorrsquo rights =gt [rsquofullrsquo] identity =gt rsquoUsersrsquo rights =gt [rsquoreadrsquorsquoexecutersquo]

]

Modul umožňuje identifikovat uživatele pomociacute jejich SID (securty identifier) i FQDN(fully qualified domain name) Daacutele podporuje nastavovat praacuteva ke zdroji pomociacute mno-žiny ACE (access control entries) [32]

3104 Dalšiacute moduly pro ovlaacutedaacuteniacute prostřediacute WindowsModulů fungujiacuteciacutech v prostřediacute Windows je daleko viacutec než je možneacute v teacuteto praacuteci zmiacutenitI diacuteky aktivniacute komunitě okolo systeacutemu Puppet je na oficiaacutelniacutech zdrojiacutech pro systeacutemyWindows [33] nepřeberneacute množstviacute užitečnyacutech naacutestrojů[34]

11

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 4Testovaacuteniacute

Jako každyacute jinyacute zdrojovyacute koacuted i manifesty Puppetu mohou obsahovat chyby Můžemese poučit u programovaacuteniacute v tradičniacutech jazyciacutech a do světa spraacutevy konfigurace zařaditpsaniacute automatickyacutech testů

Testovat můžeme na viacutece uacuterovniacutech ndash můžeme staticky kontrolovat syntax koacutedu Pup-petu pomociacute programu puppet-lint [35] můžeme psaacutet unit testy pomociacute programurspec-puppet a můžeme psaacutet takeacute akceptačniacute testy nad zkonfigurovanyacutemi stroji po-mociacute naacutestroje serverspec [36]

41 Statickaacute kotrola koacuteduPrvniacute kontrola koacutedu začiacutenaacute linterem - tedy statickou analyacutezou koacutedu Pro Puppet jepřipraven program puppet-lint Ve standardniacute konfiguraci obsahuje mnoho užitečnyacutechkontrol - od kontroly spraacutevneacuteho odsazeniacute řaacutedků přes standardizovaneacute pořadiacute argumentůa vynucovaacuteniacute komentaacuteřů u definovanyacutech typů až po odhaleniacute skutečnyacutech chyb jakonapřiacuteklad duplicita v seznamu parametrů modulu

Puppet-lint dokonce umiacute pomociacute parametru --fix některeacute nedostatky saacutem opravitndash napřiacuteklad chybnyacute typ odsazeniacute řaacutedků

Puppet je pro novaacutečka poměrně zaacuteludnyacute jazyk vzhledem ke sveacute deklarativniacute povazePro programaacutetora zvykleacuteho na proceduraacutelniacute přiacutestup k psaniacute koacutedu je puppet-lint neo-cenitelnyacute raacutedce a pomocniacutek při osvojovaacuteniacute bdquobest-practicesldquo

Puppet-lint je otevřenyacute ostaniacutem vyacutevojaacuteřům a nabiacuteziacute na svyacutech straacutenkaacutech naacutevod jaksi naprogramovat vlastniacute metody linteru

42 Unit testyPo statickeacute kontrole koacutedu jsou na řadě unit testy Nabiacuteziacute se použitiacute programurspec-puppet [37] Tento program je založen na testovaciacutem frameworku pro jazykRuby Rspec [38] Rspec-puppet obsahuje veškerou funkcionalitu frameworku rspeca ještě naviacutec přidaacutevaacute rozšiacuteřeniacute pro pohodlneacute testovaacuteniacute Puppet koacutedu Při unit tes-tech se žaacutedneacute nastavovaacuteniacute vzdaacutelenyacutech strojů neprovaacutediacute ndash běh Puppetu se zastaviacute přivygenerovaacuteniacute katalogu s Puppet zdroji

Po vygenerovaacuteniacute katalogu se kontroluje stav zdrojů ktereacute byly do katalogu zařazenyMůžeme kontrolovat zda modul vygeneroval spraacutevneacute typy zdrojů se spraacutevnyacutemi parame-try můžeme kontrolovat zda modul skončil vyacutejimkou při zadaacuteniacute nepovoleneacute kombinaceparametrů a mnoho dalšiacuteho [39]

43 Akceptačniacute testyAkceptačniacute testy provaacutediacuteme na skutečnyacutech zkonfigurovanyacutech strojiacutech Pro implementacitestů jsem použil program serverspec

12

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

44 Test Driven Development

Tento program je podobně jako rspec-puppet založen na testovaciacutem frameworkuRspec Obsahuje ale naviacutec funkce pro testovaacuteniacute zdrojů a nastaveniacute systeacutemu Pomociacute růz-nyacutech backendů můžeme testy v serverspecu spouštět na různyacutech platformaacutech Tradičněje podporovaacuten Unix ale můžeme si zvolit i backend pro Docker kontejnery nebo v tomtopřiacutepadě pro stroje s operačniacutem systeacutemem Windows Pro Unix je kontrola vzdaacuteleneacutehosysteacutemu implementovaacutena ssh přiacutekazy a pro systeacutemy s Windows použiacutevaacute serverspecwinrm spojeniacute

Nejzajiacutemavějšiacute na programu serverspec jsou ovšem dostupneacute funkce pro testovaacuteniacutestavu systeacutemu Kompletniacute informace nalezneme v manuaacutelovyacutech straacutenkaacutech na internetuZde bych ale zmiacutenil několik vybranyacutech typů ktereacute lze použiacutet i na platformě Windowsfileusergrouppackagewindows feature commandporthost servicewindows registry key

44 Test Driven DevelopmentPomociacute testovaciacutech naacutestrojů ktereacute jsem představil můžeme i při psaniacute konfiguraceinfrastruktury použiacutet moderniacute techniku psaniacute koacutedu ndash Test Driven Development Samo-zřejmě nic naacutes k psaniacute testů nenutiacute (Puppet funguje i bez nich) ale pro bezchybnyacute audržitelnyacute vyacutevoj jsou testy velice vhodneacute

Unit testy a integračniacute testy oceniacuteme při samotneacutem psaniacute koacutedu v Puppetu a ak-ceptačniacute testy psaneacute v naacutestroji serverspec jsou užitečneacute i při jakeacutekoliv jineacute adminis-traci systeacutemu ndash nejsou zaacutevisleacute na použitiacute Puppetu Pokud bychom se rozhodli vyzkoušetjinyacute systeacutem pro spraacutevu konfigurace nebo v přiacutepadě prostřediacute Windows nativniacute spraacutevupomociacute Active Directory testy v programu serverspec naacutem posloužiacute stejně dobře

13

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 5Testovaciacute prostřediacute AWS

V předchoziacutech kapitolaacutech jsem srovnaacuteval psaniacute konfigurace s psaniacutem koacutedu v tradič-niacutem programovaciacutem jazyku V teacuteto kapitole představiacutem dalšiacute podobnost s tradičniacutemprogramovaacuteniacutem ndash vyacutevojoveacute prostřediacute

Velmi často programujeme na jineacutem typu zařiacutezeniacute než na ktereacutem bude programprovozovaacuten Valnaacute většina programaacutetorů programuje na osobniacutem počiacutetači či notebookuale přesto vyacutesledek jejich praacutece funguje na uacuteplně jinyacutech architekturaacutech ndash programujemezaacutekladniacute desky roboty aplikace na mobilniacutech telefonech mnohatunoveacute stroje ve vyacuteroběndash všechny tyto platformy majiacute společnyacute rys vyacutevoje ndash použitiacute emulaacutetoru U konfiguracejsme postaveni před uacuteplně stejnyacute probleacutem Programujeme koacuted kteryacute bude fungovat nauacuteplně jinyacutech platformaacutech a proto pro rychlyacute vyacutevoj potřebujeme opět emulaacutetor ciacuteloveacutehosysteacutemu ndash virtualizovanyacute hardware

Od virtualizačniacuteho systeacutemu potřebujeme zejmeacutena rychleacute generovaacuteniacute strojů pro laděniacutea testovaacuteniacute našiacute konfigurace Pro každyacute use case konfigurace budeme chtiacutet zvlaacuteštniacute izo-lovanyacute hardware abychom se mohli soustředit na konkreacutetniacute konfiguračniacute uacutekol a teprvez vyzkoušenyacutech ověřenyacutech postupů sklaacutedali funkčniacute celek

Existuje mnoho služeb a programů ktereacute naacutem virtualizaci hardware nabiacuteziacute Můžemesi zvolit virtualizaci běžiacuteciacute na našem osobniacutem počiacutetači (Virtualbox Vagrant) nebozvolit službu kteraacute využiacutevaacute hw zdroje vzdaacuteleneacuteho vyacutepočetniacuteho střediska (Amazon WebServices Microsoft Azure Google cloud a dalšiacute) Pro testovaacuteniacute Puppetu na Windowsjsem se rozhodl použiacutet praacutevě služby vzdaacuteleneacuteho datacentra Diacuteky tomu maacutem volnostv modelovaacuteniacute viacutecestrojoveacute konfigurace a nejsem vaacutezaacuten dostupnyacutem fyzickyacutem hardwaremeacuteho osobniacuteho počiacutetače Zaacuteroveň je možneacute u vzdaacuteleneacute služby daacutet přiacutestupoveacute uacutedajeosobaacutem zodpovědnyacutem za kontrolu (a nenutit je instalovat si virtualizačniacute program nasveacute počiacutetače)

Puppet je systeacutem pro ovlaacutedaacuteniacute zdrojů ciacuteloveacuteho systeacutemu a proto naacutes jistě nepřekvapiacuteže i pro virtualizačniacute platformy existuje mnoho Puppet modulů pomociacute nichž lze tytoplatformy ovlaacutedat Mezi podporovaneacute platformy patřiacute napřiacuteklad Amazon Web Services(AWS) Microsoft Azure VMware OpenStack nebo Google Compute Engine [40]

Diacuteky programatickeacutemu přiacutestupu Puppetu můžeme k vyacutevoji konfigurace infrastruk-tury přistupovat jako k vyacutevoji běžneacuteho programu Tedy vyacutesledek neniacute konkreacutetniacute instalo-vanaacute instance stroje ale koacuted odevzdanyacute ve verzovaciacutem systeacutemu kteryacute můžeme kdykolivpoužiacutet a vyrobit si instance noveacute

Puppet naacutem tak umožňuje uchovaacutevat si přesnou podobu nastaveniacute prostřediacute ve kte-reacutem naši konfiguraci testujeme a pomociacute napojeniacute na api poskytovatele virtualizacemůžeme celeacute prostřediacute vytvořit a po použitiacute opět odstranit

51 Požadavky na virtualizačniacute platformumusiacute umět spouštět linuxoveacute stroje i stroje s operačniacutem systeacutemem Windowsmusiacute umět modelovat siacuteťoveacute zapojeniacute strojů abychom si mohli vyzkoušet

agent - master komunikaci

14

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

52 Amazon Web services

musiacute byacutet za rozumnou cenumusiacute existovat možnost spravovat prostřediacute programaticky nejleacutepe pomociacute Puppetmodulů

52 Amazon Web servicesK testovaacuteniacute konfigurace systeacutemu Windows pomociacute Puppetu jsem si vybral službu Ama-zon Web Services (AWS) S touto platformou jsem již ziacuteskal zkušenosti v profesionaacutelniacutemnasazeniacute a je mi proto z uvedenyacutech platforem nejbližšiacute Zaacuteroveň splňuje všechny bodyz vyacuteše uvedenyacutech požadavků

AWS je poskytovatel infrastruktury bdquoon demandldquo Tedy platiacute se jen za to co skutečněpoužiacutevaacuteme To je velice vyacutehodneacute v testovaciacutem prostřediacute kdy neniacute dlouhodobě spuštěnžaacutednyacute stroj ale soustavně se stroje při spuštěniacute testu zaklaacutedajiacute a na konci testu se rušiacuteI při viacutecestrojoveacute konfiguraci prostřediacute tak zaplatiacuteme pouze několik minut běhu celeacutehoprostřediacute

53 Služby AWSV protřediacute AWS chceme zaklaacutedat virtuaacutelniacute stroje a připojovat je do naacutemi zvoleneacute siacuteťoveacutetopologie V naacutesledujiacuteciacutech kapitolaacutech představiacutem zaacutekladniacute stavebniacute prvky prostřediacute ajejich ovlaacutedaacuteniacute pomociacute Puppetu

531 VPCVirtual Private Cloud (VPC) je služba pro modelovaacuteniacute siacuteťoveacuteho zapojeniacute virtuaacutelniacutechstrojů VPC v sobě zahrnuje veškereacute siacuteťoveacute nastaveniacute prostřediacuteVPC zapouzdřuje veškerou infrastrukturu v raacutemci AWS uacutečtu Určuje AWS region

ve ktereacutem budeme pracovat a udaacutevaacute vnitřniacute povolenyacute rozsah adres Přiacuteklad založeniacuteVPC pomociacute Puppet modulu

ec2_vpc rsquopuppet-testrsquoensure =gt presentregion =gt rsquoeu-central-1rsquocidr_block =gt 1000024

Subnet představuje podsiacuteť v raacutemci VPC Musiacute existovat alespoň jedna ale mužemejich založit viacutec pro modelovaacuteniacute komplikovanějšiacute siacuteťoveacute topologieRoute table pro každou podsiacuteť musiacuteme specifikovat routovaciacute tabulku Internet Gateway (IGW) prvek pro napojeniacute VPC podsiacutetě do veřejneacuteho internetuElastic IP můžeme alokovat veřejnou ipv4 adresu a přiřadit ji virtuaacutelniacutemu strojiSecurity Group můžeme specifikovat jednoduchaacute pravidla pro povolovaacuteniacute a zakazo-vaacuteniacute komunikace po siacuteti ndash v podstatě je to takovyacute jednoduchyacute firewall

532 EC2Elastic Compute Cloud (EC2) je služba ovlaacutedajiacuteciacute virtuaacutelniacute stroje Zejmeacutena je možneacutepomociacute niacute vytvaacuteřet a mazat virtuaacutelniacute stroje vytvaacuteřet obrazy disků pro zaacutelohovaacuteniacute avytvaacuteřet ze strojů šablony ze kteryacutech můžeme zaklaacutedat dalšiacute stroje

15

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

5 Testovaciacute prostřediacute AWS Instances vlastniacute virtuaacutelniacute stroje Nabiacutezejiacute se v různyacutech vyacutekonnostniacutech konfiguraciacutech

a předevšiacutem si můžeme zvolit různeacute předinstalovaneacute operačniacute systeacutemy V teacuteto praacutecipoužiji Debian Jessie a Windows Server 2012Amazon Machine Images (AMI) jsou připraveneacute obrazy disků s nainstalovanyacutem ope-račniacutem systeacutemem ze kteryacutech se spouštiacute noveacute virtuaacutelniacute stroje Jsou připraveny nej-různějšiacute varianty AMI na AWS Marketplace s předpřipravenyacutem software Můžeme siale připravit i naše vlastniacute šablony a toho využijeme pro zaacutekladniacute instalaci PuppetuVolumes spraacuteva pevnyacutech disků připojenyacutech k instanciacutemSnapshots vytvaacuteřeniacute obrazů disků pro zaacutelohu

533 Route53Route53 je dynamickyacute dns server kteryacute umožňuje spravovat zaacuteznamy o domeacuteně jakve vnitřniacute siacuteti tak při komunikaci s okolniacutem internetem Pro ovlaacutedaacuteniacute zaacuteznamů o do-meacuteně je připraveno programatickeacute rozhraniacute Toto rozhraniacute se daacute použiacutet napřiacuteklad proimplementaci dynamickeacute dns služby kdy se každyacute stroj při startu do dns přihlaacutesiacute a přivypiacutenaacuteniacute odhlaacutesiacute

16

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 6Workflow

V teacuteto kapitole představiacutem postup vyacutevoje Puppet koacutedu od programovaacuteniacute na lokaacutelniacutempočiacutetači až po nasazeniacute koacutedu na společnaacute prostřediacute (testovaciacute nebo dokonce produkčniacute)Puppet přivaacutediacute do prostřediacute Windows spraacutevu systeacutemu ve formě zdrojoveacuteho koacutedu (miacutestoovlaacutedaacuteniacute grafickeacuteho rozhraniacute) Stejně jako u jakeacutehokoliv jineacuteho zdrojoveacuteho koacutedu je tedyna miacutestě tento koacuted verzovat pomociacute nějakeacuteho verzovaciacuteho systeacutemu Pro tento přiacutepadjsem zvolil distribuovanyacute verzovaciacute systeacutem Git

V předchoziacutech kapitolaacutech jsem se často odkazoval na veřejně dostupneacute moduly ktereacutemůžeme použiacutet pro naši praacuteci Je načase představit způsob jak uchovaacutevat zaacutevislosti natěchto externiacutech modulech

61 Spraacuteva externiacutech modulůMůžeme si zvolit z viacutece možnostiacute jak ke spraacutevě modulů přistupovatPuppet ModuleGit SubmodulePuppetfile

611 Puppet modulePrvniacute možnost jak se dostat ke sdiacuteleneacutemu koacutedu je pomociacute přiacutekazu puppet module kteryacuteje součaacutetiacute standardniacute instalace Puppetu Pomociacute tohoto programu můžeme instalovatmoduly zveřejněneacute na portaacutele httpsforgepuppetcom Nabiacutedka je značně ob-saacutehlaacute a z veřejnyacutech modulů si pravděpodobně vybereme Může se však staacutet že bychompotřebovali nějakyacute meacuteně znaacutemyacute modul kteryacute najdeme napřiacuteklad na httpsgithubcom ale na httpsforgepuppetcom zveřejněnyacute neniacute Stejně tak naacutem Puppet Mo-dule nepomůže v přiacutepadě že bychom chtěli sdiacutelet naacuteš vlastniacute modul mezi projekty achtěli ho miacutet pouze ve sveacutem neveřejneacutem repositaacuteři

612 Git SubmoduleProtože jsem se rozhodl použiacutet git můžeme zvolit řešeniacute Git Submodule Valnaacute většinamodulů je zveřejněna na httpsgithubcom a proto si je můžeme bez probleacutemupřidat do našeho projektu jako submoduly Nevyacutehoda je ovšem značnaacute naacuteročnost použitiacutesubmodulů zejmeacutena při aktualizaci vzaacutelenyacutech repositaacuteřů Naviacutec je třeba aby všichničlenoveacute tyacutemu se submoduly uměli pracovat

613 PuppetfileKonečně třetiacute navrhovaneacute řešeniacute počiacutetaacute se zavedeniacutem konfiguračniacuteho souboruPuppetfile V tomto souboru definujeme externiacute moduly z repositaacuteře forgepuppetcom můžeme zde uveacutest i git nebo svn repositaacuteře s přiacuteslušnou verziacute commitu a nakonecmůžeme takeacute specifikovat cestu k lokaacutelniacutemu modulu Staženiacute respektive aktualizaci

17

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

6 Workflow takoveacuteho Puppetfilu obstaraacute program r10k o ktereacutem ještě bude řeč v naacutesledujiacuteciacutekapitole Pomociacute přiacutekazu

r10k puppetfile install

nainstaluje program r10k do zadaneacuteho adresaacuteře veškereacute zaacutevislosti z Puppetfilu

62 Udržovaacuteniacute konfigurace ve verzovaciacutem systeacutemuGit je velice užitečnyacute naacutestroj mimojineacute diacuteky kvalitniacute spraacutevě různyacutech verziacute koacutedu pomociacutevětviacute Praacutevě větve budou hraacutet kliacutečovou roli i v mnou zvoleneacutem postupu

Když spolupracuje viacutece lidiacute na jednom puppet projektu pravděpodobně budou para-lelně vyviacutejet různeacute funkcionality Pomociacute gitu si rozděliacute svou praacuteci do větviacute ale potompřijde probleacutem jak si na společneacutem prostřediacute konfiguraci vyzkoušet

Snadno můžeme vyklonovat git repositaacuteř se zdrojovyacutem koacutedem na Puppet Masterdo složky etcpuppet a tiacutem zajistit že Puppet Master aplikuje naši konfiguraci naagenty Probleacutem nastane v přiacutepadě kdy bychom chtěli z jednoho Puppet Mastera dis-tribuovat viacutece verziacute konfigurace najednou Napřiacuteklad bychom chtěli vyzkoušet novouverzi modulu ve sdiacuteleneacutem prostřediacute a nechceme přitom možneacute chyby zaneacutest na všechnystroje Hodilo by se kdybychom si mohli zvolit jeden konkreacutetniacute testovaciacute stroj a praacutevěna něm vyzkoušet novou verzi modulu

Naštěstiacute autoři Puppetu mysleli i na tento přiacutepad a připravili Puppet prostřediacute (Pup-pet Environments)

63 Puppet EnvironmentsPuppet Master může agentům nabiacutezet viacutece izolovanyacutech konfiguraciacute (prostřediacute) Agentisi potom dle sveacuteho uvaacuteženiacute vyberou jedno prostřediacute a o to Puppet Mastera požaacutedajiacuteProstřediacute se mohou mezi sebou lišit v jedinneacutem parametru ale i v celeacutem rozsahu koacutedu

Povšimněme si prosiacutem že prostřediacute je jedniacutem z maacutela způsobů jak si agent můžezvolit svou konfiguraci a nenechat vše jen na masterovi

Prostřediacute mohou byacutet definovaacutena staticky v hlavniacutem konfiguračniacutem souboruetcpuppetpuppetconf [15] pokud ale počiacutetaacuteme s dynamickou množinou prostřediacutebude pro naacutes vhodnějšiacute definovat prostřediacute dynamickaacute Pro to stačiacute založit v hlavniacutemadresaacuteři Puppetu adresaacuteř environments (napřiacuteklad etcpuppetenvironments) Agent potom použiacutevaacute prostřediacute stejně bez ohledu na to zda jsou definovaacutena statickynebo dynamicky

Posledniacute krok spočiacutevaacute v namapovaacuteniacute větviacute v git repositaacuteři na adresaacuteře dynamickyacutechprostřediacute v Puppet Masteru

64 r10kProgram r10K je program napsanyacute v jazyce Ruby a maacute za uacutekol zefektivnit praacuteci a přiinstalaci Puppet Modulů a prostřediacute [41] Je to oficiaacutelniacute program použityacute i v komerčniacutevariantě Puppetu ndash Puppet Enterprise

V předchoziacute kapitole jsem vysvětlil jak pomociacute Puppetfile spravuje moduly konfigu-race a nyniacute zbyacutevaacute představit spraacutevu dynamickyacutech prostřediacute

Program r10k dokaacuteže pomociacute přiacutekazu deploy ze zadaneacuteho git repositaacuteře přečiacutestvšechny větve a pro každou z nich vytvořit na určeneacutem miacutestě adresaacuteř s obsahem reposi-taacuteře Naviacutec pokud danyacute repositaacuteř obsahuje v kořenoveacutem adresaacuteři Puppetfile nainstalujevyacuteše zmiacuteněnyacutem způsobem všechny potřebneacute zaacutevislosti

18

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

64 r10k

Pokud tedy maacuteme v našem git repositaacuteři větve production testing dev zavolaacuteniacutempřiacutekazu

r10k deploy environment -p

vytvořiacuteme tuto adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentsproductionetcpuppetenvironmentstestingetcpuppetenvironmentsdev

Puppet Master potom může nabiacutezet agentům ke konfiguraci tři různaacute prostřediacute

19

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 7Implementace

V teacuteto kapitole demonstruji použitiacute systeacutemu Puppet při spraacutevě počiacutetačoveacute siacutetě s počiacute-tači s operačniacutem systeacutemem Windows Zaměřiacutem se zejmeacutena na pracovniacute postup vyacutevojekonfigurace a na představeniacute zdrojoveacuteho koacutedu konfigurace

71 Specifikace uacutelohyPředstaviacutem modelovyacute přiacuteklad na ktereacutem demonstruji zaacutekladniacute techniky a přednostisysteacutemu Puppet

Mějme počiacutetačovou učebnu ve ktereacute probiacutehaacute vyacuteuka programovaacuteniacute Potřebujeme za-jistit aby na počiacutetačiacutech byly nainstalovaacuteny programy pro vyacuteuku (Notepad++ a NetBe-ans) aby se mohli studenti na počiacutetače přihlaacutesit ndash tedy aby každyacute měl sveacuteho uživateleNa konci vyacuteuky bude pro studenty připraven test ndash je tedy třeba na stroje rozdistri-buovat zadaacuteniacute Aby ale studenti neopisovali budou jejich stroje předem rozděleny dodvou skupin a každaacute skupina dostane zadaacuteniacute odlišneacute

72 Vyacuteběr technologiiacuteVeškereacute zdrojoveacute koacutedy budu udržovat v git repositaacuteři umiacutestěneacutem ve veřejneacute služběBitBucket gitbitbucketorgstepanekjpuppetgit

Na zaacutekladě zhodnoceniacute prostřediacute AWS z kapitoly Testovaciacute prostřediacute jsem se rozhodlpoužiacutet praacutevě to Kromě již zmiacuteněnyacutech vyacutehod platformy AWS je pozitivniacute i podporaPuppetu Puppet nabiacuteziacute mnoho modulů pro ovlaacutedaacuteniacute prvků AWS infrastruktury [42]Teacuteměř celou konfiguraci prostřediacute tak mohu udržovat jako Puppet manifest (s vyacutejimkoudynamickeacuteho registrovaacuteniacute strojů do dns Route53)

Jako distribučniacute model pro tuto uacutelohu použiji model agent - master ndash tedy budezapotřebiacute jeden linuxovyacute stroj pro roli Puppet Mastera a daacutele spravovaneacute stroje s ope-račniacutem systeacutemem Windows Pro mastera použiji operačniacute systeacutem Debian ve verzi 84(koacutedoveacute označeniacute Jessie) a pro agenty použiji operačniacute systeacutem Microsoft Windows Ser-ver 2012 R2 Base

Daacutele budu samozřejmě potřebovat program puppet ndash zvolil jsem verzi 372 zejmeacutenaproto že je obsažena ve vyacutechoziacutem nastaveniacute Debianu

73 Vyacutevojoveacute prostřediacuteNa obraacutezku 71 je znaacutezorněna struktura vyacutevojoveacuteho prostřediacute Celeacute prostřediacute je izolo-

vaacuteno ve vlastniacutem VPC Uvnitř VPC je definovaacutena lokaacutelniacute podsiacuteť ke ktereacute je připojenaIGW aby stroje mohly komunikovat s vnějšiacutem internetem V siacuteti jsou daacutele umiacutestěnyEC2 instance ke kteryacutem se budu připojovat pomociacute ElasticIP Stroje dostaacutevajiacute přikaždeacutem spuštěniacute jinou vnitřniacute IPv4 adresu ale my musiacuteme zaneacutest propojeniacute strojů doneměnneacute struktury zdrojoveacuteho koacutedu ndash potřebujeme proto předklad ip adres na staacuteleacute dns

20

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

73 Vyacutevojoveacute prostřediacute

Obraacutezek 71 Diagram vyacutevojoveacuteho prostřediacute v AWS

zaacuteznamy To zajistiacute služba Route53 ndash dynamicky konfigurovatelnyacute dns server Bohuželpro dynamickeacute registrovaacuteniacute EC2 instanciacute do Route53 dns serveru zatiacutem Puppet modulneniacute Při zaklaacutedaacuteniacute prostřediacute jsem tedy zadal přiacuteslušneacute zaacuteznamy do Route53 ručně Daloby se to jistě zautomatizovat použitiacutem samostatneacuteho naacutestroje kteryacute přihlašuje systeacutemdo Route53 při startu a odhlašuje při vypiacutenaacuteniacute

Daacutele představiacutem vlastniacute konfiguraci AWS vyacutevojoveacuteho prostřediacute zapsanou jako PuppetManifest

$vpcName = rsquoagent-masterrsquo$ensure = rsquopresentrsquo

$debianMasterName = rsquodebian-masterrsquo

21

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

7 Implementace $debianMasterAmi = rsquoami-4ebd5221rsquo

aws_vpc $vpcNameensure =gt $ensurevpcName =gt $vpcName

aws_vpcec2_instance rsquodebian-masterrsquoname =gt $debianMasterNameimage_id =gt $debianMasterAmi

Aws_vpcEc2_instance lt||gt ensure =gt $ensuresubnet =gt $vpcName-subnetsecurity_groups =gt [$vpcName-access]

aws_vpcec2_elastic_ip rsquo5228187150rsquoensure =gt $ensureinstance =gt $debianMasterName

if $ensure == rsquoabsentrsquo Ec2_instance lt||gt

before =gt [Ec2_vpc_subnet[$vpcName-subnet]Ec2_securitygroup[$vpcName-access]

]

Pro jednoduchost zde uvaacutediacutem přiacuteklad vytvořeniacute jedinneacuteho stroje Puppet Master -jak se vytvaacuteřiacute viacutece strojů je uvedeno v repositaacuteři praacutece Typ Aws_vpc je můj vlastniacutemodul kteryacute zapouzdřuje ovlaacutedaacuteniacute VPC Obsahuje definovaneacute typy pro vytvořeniacute siacuteťoveacuteinfrastruktury pro vytvořeniacute EC2 instance a pro připojovaacuteniacute k ElasticIP

Tento manifest sestaviacute celeacute prostřediacute podle specifikovanyacutech parametrů Je sestaventak aby protřediacute uměl vytvořit i odstranit pomociacute proměnneacute ensure Je důležiteacute imple-mentovat i odstraňovaacuteniacute abychom mohli po otestovaacuteniacute nepoužiacutevaneacute prostředky z awsodstranit (čas po kteryacute jsou prostředky spuštěny je zpoplatněn)

Z koacutedu je patrneacute že na sobě jednotliveacute zdroje zaacutevisiacute Pro zapojeniacute EC2 instancemusiacute byacutet napřiacuteklad již připravena podsiacuteť Aplikujiacute se zde implicitniacute zaacutevislosti To jeovšem probleacutem při odstraňovaacuteniacute pomociacute ensure =gt absent ndash tehdy je třeba odstraňo-vat zdroje v opačneacutem pořadiacute než při vytvaacuteřeniacute Implicitniacute zaacutevislosti totiž neřešiacute zdazdroje vytvaacuteřiacuteme nebo odstraňujeme a aplikuje se vždyPři odstraňovaacuteniacute je ovšem třebazaacutevislosti obraacutetit Napřiacuteklad nejprve je třeba odtranit EC2 instanci a teprve potom mů-žeme rušit siacuteť Proto je na konci manifestu vyacuteraz v podmiacutence if(ensure =gt absent)kteryacute pořadiacute provaacuteděniacute zdrojů upravuje explicitně

22

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

74 Vyacuteslednaacute konfigurace

Daacutele je třeba zmiacutenit AMI šablony ze kteryacutech jsou EC2 instance spouštěny Ty jsempředem připravil tak že jsem na čistyacute operačniacute systeacutem nainstaloval program puppetresp puppetmaster To je prvniacute nutnyacute krok abychom s Puppet infrastrukturou vů-bec mohli začiacutet Daacutele jsem do AMI obrazu pro Puppet Mastera nainstaloval programgit a přidal bdquodeployldquo ssh kliacuteč abych na něj mohl pomociacute Gitu nahraacutet zdrojovyacute koacutedkonfigurace z git repositaacuteře

Manifest je možneacute spustit na libovolneacutem počiacutetači ze ktereacuteho se můžeme připojit donašeho AWS uacutečtu pomociacute aws cli programu Puppet moduly vyžadujiacute pro přihlaacutešeniacutenastaveneacute proměnneacute prostřediacute s přihlašovaciacutemi uacutedaji k AWS uacutečtu AWS_ACCESS_KEY_ID aAWS_SECRET_ACCESS_KEY ktereacute nalezneme ve weboveacutem administračniacutem rozhraniacute AWS

731 Psaniacute Puppet koacuteduParalelně s vytvaacuteřeniacutem vyacutevojoveacuteho prostřediacute můžeme začiacutet připravovat manifesty i prohlavniacute konfiguraci Windows Vyacutevoj konfigurace probiacutehaacute na lokaacutelniacutem počiacutetači pomociacuteobliacutebeneacuteho vyacutevojoveacuteho editoru Pro mnoho programaacutetorskyacutech editorů existujiacute rozšiacuteřeniacutepro jazyk Puppet Při psaniacute koacutedu si již na lokaacutelniacutem počiacutetači můžeme postupně oveřovatspraacutevnost konfigurace pomociacute spouštěniacute pupet lint (statickaacute kontrola Puppet koacutedu)nebo napřiacuteklad psaniacutem unit testů v prostřediacute rspec-puppet

732 Navaacutezaacuteniacute komunikace agentů s masteremPro zahaacutejeniacute komunikace mezi agenty a masterem je třeba proveacutest mezi těmito strojivyacuteměnu a potvrzeniacute ssl certifikaacutetů Komunikace totiž probiacutehaacute zabezpečeně Každyacute agenti master si při prvniacutem spuštěniacute vygeneruje dvojici kliacutečů Agenti při navaacutezaacuteniacute spojeniacute po-šlou k ověřeniacute svůj veřejnyacute kliacuteč masterovi a ten si kliacuteč zařadiacute do skupiny kliacutečů k ověřeniacuteAdministraacutetor potom tyto požadavky na masterovi ověřiacute zkontrolovaacuteniacutem otisku kliacuteče anaacuteslednyacutem přiacutekazem puppet cert sign lthostname agentagt potvrdiacute autenticitu cer-tifikaacutetu Agentovi se vraacutetiacute zpět veřejnyacute kliacuteč mastera ndash potvrzovat nemusiacute nic

Tiacutemto se spustiacute proces spraacutevy konfigurace agenta

733 Nasazeniacute koacutedu na vyacutevojoveacute prostřediacuteKoacuted udržovanyacute v git repositaacuteři potřebujeme nahraacutet na Puppet Master Použiji k tomuprogram r10k Do konfiguračniacuteho souboru etcr10kr10kyml na stroji Puppet Mas-ter zadaacuteme cestu ke git repositaacuteři a cestu kam chceme koacuted umiacutestit (napřiacuteklad přiacutemo doetcpuppet kde ho Puppet očekaacutevaacute) Spuštěniacutem přiacutekazu

r10k deploy environment -p

na stroji Puppet Master zařiacutediacuteme nahraacuteniacute aktuaacutelniacute verze koacutedu z git repositaacuteředo daneacute cesty Program r10k zaacuteroveň vytvořiacute spraacutevnou adresaacuteřovou strukturu vetcpuppetenvironment Pro každou větev v git repositaacuteři připraviacute vlastniacute adresaacuteřa tiacutem může Puppet pracovat s větvemi gitu jako s Puppet Environments ndash tohovyužijeme při nahraacutevaacuteniacute odlišnyacutech verziacute zadaacuteniacute testu pro studenty na vyacuteukoveacute strojeV konfiguraci Puppetu každeacuteho vyacuteukoveacuteho stroje zadaacuteme jedno ze dvou prostřediacute apomociacute větviacute v gitu potom udržujeme rozdiacutely mezi těmito konfiguracemi

74 Vyacuteslednaacute konfiguraceUacutelohu jsem naimplementoval pomociacute třiacute modulů Ovlaacutedajiacute uživatele instalaci programůa soubory se zadaacuteniacutem

23

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

7 Implementace 741 Modul students

Modul students maacute jeden argument a to seznam studentů Podle tohoto argumentuzaložiacute přiacuteslušneacute lokaacutelniacute uživatele nejdřiacutev ovšem zařiacutediacute aby existovala potřebnaacute skupinauživatelů students Každeacutemu uživateli modul založiacute vlastniacute domovskyacute adresaacuteř Bohuželzdroj user neumiacute adresaacuteř založit saacutem a spoleacutehaacute se že již existuje Proto adresaacuteř musiacutemezaložit sami pomociacute zdroje file

class students($students = []

) local user and local group

each($students)|$student|

file CUsers$studentensure =gt directory

user $student

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt CUsers$student

group rsquostudentsrsquo

ensure =gt present

742 Modul classroom programsPro spraacutevu programů použiji spraacutevce baliacuteků chocolatey Pomociacute něj je instalace pro-gramů velice snadnaacute ndash stačiacute použiacutet zdroj package

class classroom_programsinclude rsquochocolateyrsquo

package rsquonotepadplusplusinstallrsquoensure =gt latestprovider =gt chocolatey

package rsquonetbeansrsquo

ensure =gt rsquo73rsquoprovider =gt chocolateyrequire =gt Package[rsquojdk8rsquo]

packagersquojdk8rsquo

ensure =gt rsquo8092rsquoprovider =gt chocolatey

Všimněme si že jsem zde musel vyjaacutedřit zaacutevislost programu NetBeans na jdk8 ndashPuppet o teacuteto zaacutevislosti nic neviacute a proto zde nenastane automatickyacute require

24

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

74 Vyacuteslednaacute konfigurace

743 Modul classroom testNakonec je třeba na vzdaacuteleneacute stroje nahraacutet zadaacuteniacute uacutekolu K tomu naacutem posloužiacute mo-dul classroom_test kteryacute diacuteky parametrizovaneacute šabloně vyplniacute zadaacuteniacute pro každeacutehostudenta individuaacutelně

class classroom_test($students

)

each($students)|$student|

file CUsers$studenttesttxtensure =gt filerequire =gt File[CUsers$student]content =gt template(rsquoclassroom_testtesttxterbrsquo)

Šablona pro zadaacuteniacute s použityacutem parametrem

Zadaacuteniacute testu A pro lt=studentgt

Daacutele majiacute byacutet stroje rozděleny do dvou skupin tak aby každaacute skupina dostala odlišneacutezadaacuteniacute To můžeme elegantně zařiacutedit použitiacutem Puppet Environments V git repositaacuteřik tomu uacutečelu připraviacuteme dvě větve zadaniA a zadaniB Na Puppet Masteru potompomociacute přiacutekazu

r10k deploy environment -p

vytvořiacuteme naacutesledujiacuteciacute adresaacuteřovou strukturu

etcpuppetenvironmentsetcpuppetenvironmentszadaniAetcpuppetenvironemntszadaniB

To je přesně struktura ktereacute Puppet Master rozumiacute a může tak agentům poskytovatdvě různeacute verze manifestů V našem přiacutepadě se manifesty lišiacute praacuteve v šabloně zadaacuteniacute

25

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 8Otestovaacuteniacute funkčnosti implementace

Pro kontrolu spraacutevnosti konfigurace připraviacutem sadu automatickyacutech testů Pro každyacutemanifest připraviacutem sadu unit testů Daacutele pomociacute akceptačniacutech testů psanyacutech v naacutestrojiserverspec budu testovat strukturu vyacutevojoveacuteho prostřediacute a nastaveniacute jednotlivyacutechstrojů

81 Unit testyPro unit testy použiacutevaacutem program rspec-puppet Testy probiacutehajiacute tak že se testovanyacutemanifest spustiacute v odděleneacutem adresaacuteři kde jsou připraveny všechny zaacutevislosti (moduly)pro běh manifestu Naacutesledně se manifest pomociacute programu rspec-puppet nanečistospustiacute (tedy konfigurace doopravdy neměniacute stav systeacutemu) a kontroluje se zda manifestproběhl jak měl

Jako přiacuteklad unit testu zde uvedu test na třiacutedu students

describe rsquostudentsrsquo do

let (title) rsquotest_instancersquo context rsquowith ensure =gt presentrsquo do

let(params) students =gt [rsquotest_studentrsquo]

it is_expectedto compile end

let (title) rsquotest_instancersquo context rsquowith ensure =gt rsquo + instanceState do

let(params) students =gt [rsquotest_studentrsquo test_student1]

it

should contain_file(CUserstest_student)with(

ensure =gt directory

)should contain_file(CUserstest_student1)with(

ensure =gt directory

)should contain_user(test_student)with(

26

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

82 Akceptačniacute testy

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_studentrsquo

)should contain_user(test_student1)with(

ensure =gt presentpassword =gt rsquo123456Abcrsquogroups =gt [rsquostudentsrsquo rsquoRemote Desktop Usersrsquo]home =gt rsquoCUserstest_student1rsquo

)should contain_group(students)with(

ensure =gt present

)

end

end

82 Akceptačniacute testyTesty jsou ve zvlaacuteštniacute variantě pro každyacute ovlaacutedanyacute stroj ndash zde pro stručnost uvedu jedentest pro Puppet Agent

describe user(rsquostudent1rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe user(rsquostudent2rsquo) doit should exist it should belong_to_group rsquostudentsrsquo it should belong_to_group rsquoRemote Desktop Usersrsquo

end

describe file(rsquocUsersstudent1testtxtrsquo) doit should be_file it should contain testu A it should contain student1

enddescribe file(rsquocUsersstudent2testtxtrsquo) do

it should be_file it should contain testu A it should contain student2

27

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

8 Otestovaacuteniacute funkčnosti implementace end

describe user(rsquopuppetrsquo) doit should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

describe package(rsquoNetbeans IDE 73rsquo) doit should be_installed

end

describe package(rsquoNotepad++rsquo) doit should be_installed

end

83 Testovaacuteniacute struktury vyacutevojoveacuteho prostřediacuteKromě testovaacuteniacute vlastniacute implementace konfigurace pro Windows ve vyacutevojoveacutem prostřediacuteje vhodneacute kontrolovat takeacute manifest kteryacutem prostřediacute vytvaacuteřiacuteme Můžeme ho opěttestovat unit testy i akceptačniacutemi testy

Přiacuteklad unit testu v rspec-puppet kteryacute kontroluje modul aws_vpc

describe rsquoaws_vpcrsquo dolet (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it is_expectedto compile end

let (title) rsquotestVpcrsquo context rsquowith ensure =gt presentrsquo do

let(params) ensure =gt rsquopresentrsquovpcName =gt rsquotestVpcrsquo

it

should contain_ec2_vpc(rsquotestVpcrsquo)should contain_ec2_securitygroup(rsquotestVpc-accessrsquo)should contain_ec2_vpc_subnet(rsquotestVpc-subnetrsquo)should contain_ec2_vpc_internet_gateway(rsquotestVpc-igwrsquo)should contain_ec2_vpc_routetable(rsquotestVpc-routesrsquo)

end

end

V prvniacutem testu kontrolujeme zkompilovatelnost modulu a ve druheacutem kontrolujemeže obsahuje definice všech potřebnyacutech AWS zdrojů pro vytvořeniacute kompletniacute siacuteťoveacute in-frastruktury

28

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

84 Dedikovaneacute testovaciacute stroje

Akceptačniacute testy jsou vhodneacute zejmeacutena na kontrolu vyacutechoziacuteho stavu strojů ktereacutese hlaacutesiacute pod spraacutevu Puppet Mastera Tyto stroje lze testovat na spraacutevneacute nastaveniacute aspuštěniacute systeacutemoveacute služby puppet Spraacutevneacute nastaveniacute uživatele pod kteryacutem puppetběžiacute a v přiacutepadě Puppet Mastera můžeme kontrolovat zda maacute všechny předpokladypro staacutehnutiacute zdrojoveacuteho koacutedu konfigurace

Komentovanyacute přiacuteklad testu na kontrolu vyacutechoziacuteho stavu systeacutemu user for connecting to machinedescribe user(rsquopuppetrsquo) do

it should exist it should belong_to_group(rsquoAdministratorsrsquo)

end

We need git for fetching configuration from git repositorydescribe package(rsquoGit version 283rsquo) do

it should be_installed end

We need powershell executing of remote commandsdescribe Windows_feature(rsquoPowershellrsquo) do

it should be_installedby(powershell)with_version(40) end

ExecutionPolicy for running powershell scriptsdescribe command(rsquoGet-ExecutionPolicyrsquo) do

its(stdout) should contain rsquoUnrestrictedrsquoend

We need port 3389 for connecting to machine via winrm protocoldescribe port(3389) do

it should be_listening end

Obviously we need running Puppet servicedescribe service(rsquopuppetrsquo) do

it should be_installed it should be_enabled it should be_running it should have_start_mode(Automatic)

end

84 Dedikovaneacute testovaciacute strojePro běh testů jsem vyhradil zvlaacuteštniacute stroje uvnitř vyacutevojoveacuteho prostřediacute Je třeba nanich udržovat instalace testovaciacutech naacutestrojů a je tedy vhodneacute je zapojit do spravovaneacuteinfrastruktury Dalšiacute důvod proč jsem se rozhodl spouštět testy na strojiacutech uvnitř vyacutevo-joveacuteho prostřediacute je fakt že zejmeacutena akceptačniacute testy v naacutestroji serverspec přistupujiacute ktestovanyacutem strojům pomociacute jejich hostname a v teacuteto praacuteci udržuji dns zaacuteznamy strojůpouze ve vnitřniacute siacuteti

841 Rozděleniacute testů na Windows a UnixPůvodně jsem chtěl spouštět všechny testy na jedinneacutem linuxoveacutem stroji Při tomjsem ovšem narazil na probleacutem při unit testech manifestů pro Windows Naacutestroj

29

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

8 Otestovaacuteniacute funkčnosti implementace rspec-puppet se pokusiacute nanečisto zdroje aplikovat ndash napřiacuteklad při testovaacuteniacute instalaceprogramu ho ve skutečnosti neinstaluje ale zkusiacute zdroj package vytvořit aby proběhlynapřiacuteklad kontroly parametrů K aplikovaacuteniacute zdrojů jim ale Puppet musiacute rozumět aimplementace linuxu pochopitelně očekaacutevaacute zdroje ve formaacutetu pro Unix a definici zdrojůWindows vůbec nerozumiacute Napřiacuteklad pokud se pokusiacuteme validovat vytvořeniacute souborucsoubortxt na linuxoveacutem stroji rspec-puppet naacutem řekne že je cesta k souborunespraacutevně zadanaacute a že maacuteme zadat plnou cestu od kořene filesysteacutemu Linuxovaacuteimplementace nerozumiacute formaacutetu cesty Windows Podobnaacute situace nastane při volaacuteniacutevlastniacuteho přiacutekazu pomociacute programu powershell Na linuxu zahlaacutesiacute rspec-puppetchybu neznaacutemeacuteho provideru

85 Test driven developmentDiacuteky vyacuteše zmiacuteněnyacutem testovaciacutem technikaacutem můžeme uplatnit i programovaciacute styl TestDriven Development Tedy uacutezkeacute propojeniacute psaniacute testů a vyacutekonneacuteho koacutedu kdy je každaacutečaacutest vyacutekonneacuteho koacutedu napsaacutena jako reakce na neprochaacutezejiacuteciacute test Důsledneacute testovaacuteniacute jevelice vhodneacute praacutevě v přiacutepadě psaniacute koacutedu konfigurace protože přes všechny automati-zujiacuteciacute naacutestroje znamenaacute rozbitiacute testovaciacuteho prostřediacute vyacuteraznějšiacute časoveacute zdrženiacute než vpřiacutepadě rozbitiacute koacutedu nativniacuteho programu psaneacuteho v tradičniacutem programovaciacutem jazyku

86 Vyacutesledky testůV teacuteto kapitole prezenuji vyacutesledky běhu testů zvoleneacute konfigurace systeacutemu Rozděliljsem testy na tři zaacutekladniacute čaacutesti ndash testy samotneacute siacuteťoveacute infrastruktury AWS testy na-staveniacute strojů pro spouštěniacute testů a konečně testy samotneacute konfigurace Puppet agentů

861 Vyacutesledky testů siacuteťoveacute infrastruktury

use case vyacutesledekModul lze zkompilovat PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc subnet PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc internet gateway PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 vpc routetable PASSPři zaklaacutedaacuteniacute siacutetě je do katalogu zařazen modul ec2 securitygroup PASS

Tabulka 81 Vyacutesledky unit testů modulu aws vpc

V tabulce 82 jsou uvedeny testy zaacutekladniacutech konfiguraciacute testů Je to praacutevě modulaws_vpc kteryacute je za tuto konfiguraci zodpovědnyacute protože určuje AMI šablony ze kte-ryacutech se stroje spouštiacute Strojů maacuteme celkem pětStroj na testovaacuteniacute WindowsStroj na testovaacuteniacute UnixuPuppet Master2x Puppet agent

Daacutele kontroluji dostupnost strojů v siacuteti 83 Řaacutedky představujiacute pokusy o spojeniacutestroje v leveacutem sloupci s ostatniacutemi Přiacuteznak NA naznačuje že komunikace mezi těmitostroji neniacute potřebnaacute a tak se netestovala Napřiacuteklad testovaciacute stroje nepotřebujiacute vidětna žaacutedneacute okolniacute stroje

30

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

86 Vyacutesledky testů

Daacutele uvaacutediacutem seznam use case pro ověřeniacute funkčnosti nastaveniacute Na tento seznam seodkazuji z tabulky 82 Usecase1 - stroj se může spojit s vnějšiacutem internetemUsecase2 - stroj maacute nainstalovanyacute program puppetUsecase3 - na stroji je spuštěnaacute služba puppetUsecase4 - na stroji je nainstalovaacuten program gitUsecase5 - na stroji je nainstalovaacuten ssh kliacuteč pro přiacutestup k repositaacuteři

use case testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Usecase1 PASS PASS PASS PASS PASSUsecase2 PASS PASS PASS PASS PASSUsecase3 PASS PASS PASS PASS PASSUsecase4 PASS PASS PASS FAIL FAILUsecase5 PASS PASS PASS FAIL FAIL

Tabulka 82 Vyacutesledky akceptačniacutech testů modulu aws vpc

zahaacutejeniacute komunikace testovaciacute Windows testovaciacute Unix Master Agent1 Agent2Testovaciacute Windows NA NA NA NA NATestovaciacute Unix NA NA NA NA NAMaster NA NA PASS PASS PASSAgent1 NA NA PASS NA NAAgent2 NA NA PASS NA NA

Tabulka 83 Vyacutesledky akceptačniacutech testů modulu aws vpc - siacuteťovaacute komunikace

862 Vyacutesledky testů testovaciacutech strojůPro testovaciacute stroje je manifest velice jednoduchyacute ndash pouze nainstalovaacuteniacute několika pro-gramů Proto jsem unit testy vypustil a zaměřil se pouze na akceptačniacute testy 84

nainstalovanyacute program testovaciacute Windows testovaciacute Unixruby PASS PASSruby-dev PASS PASSrspec PASS PASSrspec-puppet PASS PASSrake PASS PASS

Tabulka 84 Vyacutesledky akceptačniacutech testů konfigurace testovaciacutech strojů

863 Vyacutesledky testů agentůPosledniacute čaacutest teacuteto kapitoly se věnuje testům spravovanyacutech Puppet agentů

Bylo třeba otestovat tři moduly - students classroom_test a classroom_programs

V tabulce akceptačniacutech testů 88 je vidět jak se lišiacute konfigurace pro stroje agent1 aagent2 diacuteky rozdiacutelneacutemu Puppet prostřediacute

864 Ukaacutezka reportovaciacuteho naacutestroje rspecTestovaciacute naacutestroj Rspec nabiacuteziacute různeacute reportovaciacute naacutestroje pro zobrazeniacute vyacutesledků

běhu testů Na obraacutezku 81 je vyacuteřez html straacutenky s vyacutesledky běhu testu pomociacute htmlreportovaciacuteho naacutestroje

31

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

8 Otestovaacuteniacute funkčnosti implementace use case vyacutesledek

Modul lze zkompilovat PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul file typu adresaacuteř PASSDo katalogu zařazen modul user se jmeacutenem student1 PASSDo katalogu zařazen modul user se jmeacutenem student2 PASSDo katalogu zařazen modul group se jmeacutenem students PASS

Tabulka 85 Vyacutesledky unit testů modulu students s parametrem student1 a student2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student1 PASSDo katalogu zařazen modul file s obsahuje text Zadaacuteniacute testu A pro student2 PASS

Tabulka 86 Vyacutesledky unit testů modulu classroom test s parametrem student1 astudent2

use case vyacutesledekModul lze zkompilovat PASSDo katalogu zařazen modul package s naacutezvem programu NetBeans PASSDo katalogu zařazen modul package s naacutezvem programu NotepadPlusPlus PASSDo katalogu zařazen modul package s naacutezvem programu jdk8 PASS

Tabulka 87 Vyacutesledky unit testů modulu classroom programs

32

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

86 Vyacutesledky testů

Seznam use case pro akceptačniacute testy s parametrem student1 a student2Usecase1 stroj maacute založenou skupinu uživatelů studentsUsecase2 stroj maacute založeneacuteho uživatele student1Usecase3 stroj maacute založeneacuteho uživatele student2Usecase4 na stroji je nainstalovaacuten program Notepad++Usecase5 na stroji je nainstalovaacuten program NetBeansUsecase6 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student1Usecase7 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu A pro student2Usecase8 v domovskeacutem adresaacuteři uživatele student1 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student1Usecase9 v domovskeacutem adresaacuteři uživatele student2 existuje soubor testtxt a obsa-huje text Zadaacuteniacute testu B pro student2

use case Agent1 Agent2Usecase1 PASS PASSUsecase2 PASS PASSUsecase3 PASS PASSUsecase4 PASS PASSUsecase5 PASS PASSUsecase6 PASS FAILUsecase7 PASS FAILUsecase8 FAIL PASSUsecase9 FAIL PASS

Tabulka 88 Vyacutesledky akceptačniacutech testů Puppet agentů

Obraacutezek 81 Report běhu rspec testu

33

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Kapitola 9Zaacutevěr

V teacuteto praacuteci jsem představil problematiku spraacutevy počiacutetačoveacute infrastruktury s operačniacutemsysteacutemem Windows pomociacute naacutestroje Puppet Nejprve jsem přestavil naacutestroj Puppetjako naacutestroj pro konfiguraci infrastruktury (IaC) Uvedl jsem zaacutekladniacute principy Puppetua srovnal je s vybranyacutemi alternativniacutemi naacutestroji

Daacutele jsem rozebral konkreacutetniacute prostředky kteryacutemi Puppet dokaacuteže spravovat zdrojeoperačniacuteho systeacutemu Windows a srovnal použitiacute těchto prostředků na Windows a Unixu

Prozkoumal jsem prostřediacute AWS a navrhl jak ho lze použiacutet jako testovaciacute prostřediacutepro vyacutevoj konfigurace Zaacuteroveň jsem ukaacutezal jak lze použiacutet samotnyacute Puppet pro ovlaacutedaacuteniacuteAWS

S testovaciacutem prostřediacutem uacutezce souvisiacute automatickeacute testy Představil jsem rozděleniacutetestů na několik kategoriiacute ndash statickaacute kontrola zdrojoveacuteho koacutedu Puppetu unit testy anakonec akceptačniacute testy

Věnoval jsem se udržovaacuteniacute koacutedu Puppetu v git repositaacuteři Popsal jsem jak diacutekykonfiguračniacutemu souboru Puppetfile můžeme udržovat seznam zaacutevislostiacute našiacute konfiguracena veřejně dostupnyacutech modulech Daacutele jsem předvedl jak lze efektivně použiacutet Git proudržovaacuteniacute různyacutech verziacute konfigurace pro různaacute prostřediacute a jak je lze pomociacute programur10k snadno nasazovat

Nakonec jsem implementoval konkreacutetniacute přiacuteklady konfigurace v testovaciacutem prostřediacuteAWS a oveřil pomociacute automatickyacutech testů spraacutevnost konfigurace

34

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Literatura[1] LOSCHWITZ Martin Choosing between the leading open source configuration

managers ADMIN [online] 2014(23) [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[2] Srovnaacuteniacute deklarativniacuteho a imperativniacuteho stylu spraacutevy konfigurace [online] [cit2016-02-15] Dostupneacute zhttpswwwupguardcomblogarticlesdeclarative-vs-imperative-models-for-configuration-management

[3] Srovnaacuteniacute CM naacutestrojů Puppet a Ansible [online] [cit 2016-05-20] Dostupneacute zhttps ifireball wordpress com 2015 01 03 comparison-of-puppet-and-ansible

[4] Idempotence - wiki [online] [cit 2016-03-10] Dostupneacute zhttpscswikipediaorgwikiIdempotence

[5] TURK TYLER TESTING ANSIBLE IDEMPOTENCY [online] 2016 [cit 2016-04-05] Dostupneacute zhttptylerturkcomtesting-ansible-idempotency

[6] KANIES Luke [online] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblogwhy-puppet-has-its-own-configuration-language

[7] Srovnaacuteniacute Open Source Puppet s Enterprise Puppet [online] [cit 2016-05-20] Do-stupneacute zhttpswwwupguardcomarticlesopen-source-puppet-vs-puppet-enterprise-which-is-right-for-you

[8] Licence Open Source Puppet [online] [cit 2016-05-03] Dostupneacute zhttpsgithubcompuppetlabspuppetblobmasterLICENSE

[9] Srovnaacuteniacute komerčniacute a opensource verze Puppetu [online] [cit 2016-05-20] Dostupneacutezhttpspuppetcomenterprise-and-open-source

[10] Manuaacuteloveacute straacutenky pro Puppet modul Apache [online] [cit 2016-04-23] Dostupneacutezhttpsforgepuppetcompuppetlabsapache

[11] Manuaacuteloveacute straacutenky pro Puppet modul apt [online] [cit 2016-04-12] Dostupneacute zhttpsforgepuppetcompuppetlabsapt

[12] ARUNDEL John Puppet 3 Cookbook Birmingham Packt Publishing Ltd 201314-29

[13] FERNANDO Chanaka Udaya Kumara How puppet works in your IT in-frastructure [online] 2013 [cit 2016-03-21] Dostupneacute zhttpsoatutorialsblogspotcz2013_11_01_archivehtml

[14] Manuaacuteloveacute straacutenky virtuaacutelniacutech zdrojů Puppet [online] [cit 2016-05-03] Dostupneacutezhttpsdocspuppetcompuppet37referencetypehtml

35

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Literatura [15] TURNBULL James a Jeffrey MCCUNE Pro Puppet Birmingham Apress 2013

7-11 65-88[16] Diagram komunikace mezi Puppet Masterem a Puppet Agent Nodem [online] [cit

2016-04-05] Dostupneacute zhttpsdocspuppetcomguidesplatformshtml

[17] Puppet supported platforms [online] [cit 2016-05-10] Dostupneacute zhttps docs puppet com puppetserver 2 4 services master puppetserver htmlsupported-platforms

[18] Nabiacutedka instalačniacutech souborů Puppetu pro Windows [online] [cit 2016-05-03]Dostupneacute zhttps downloads puppetlabs com windows _ga = 1 109402881 525074775 1462901197

[19] WEINS Kim Cloud Computing Trends 2016 State of the Cloud Survey [online]2016 [cit 2016-05-10] Dostupneacute zhttp www rightscale com blog cloud-industry-insights cloud-computing-trends-2016-state-cloud-survey

[20] Představeniacute podpory Puppetu pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpsdocspuppetcomwindows

[21] BENNETT Liam Puppet on Windows [online] 2013 [cit 2016-05-20] Dostupneacutezhttpwwwliamjbennettmepost2013-10-06-puppet-on-windows-part-1

[22] Modul pri ovlaacutedaacuteniacute acl přiacutestupu [online] [cit 2016-04-25] Dostupneacute zhttpsforgepuppetcompuppetlabsacl

[23] Oficiaacutelniacute dokumentace pro Windows services [online] [cit 2016-05-20]Dostupneacute zhttps msdn microsoft com en-us library system serviceprocess servi-cestartmode(v=vs110)aspx

[24] Spraacutevce programů pro Windows [online] [cit 2016-05-20] Dostupneacute zhttpschocolateyorg

[25] REYNOLDS Rob Chocolatey using Chocolatey with Puppet [online] 2016 [cit2016-05-20]Dostupneacute zhttpspuppetcomblogchocolatey-using-chocolatey-puppet

[26] Program facter pro ziacuteskaacutevaacuteniacute infromaciacute o systeacutemu [online] [cit 2016-04-25] Do-stupneacute zhttpsgithubcompuppetlabsfacter

[27] REYNOLDS Rob Puppet Making Windows Awesome Since 2011 [online] 2014[cit 2016-05-20] Dostupneacute zhttpcodebettercomrobreynolds20140806puppet-making-windows-awesome-since-2011

[28] Modul pri ovlaacutedaacuteniacute Active Directory [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomjrivierewindows_ad

[29] Modul pro ovlaacutedaacuteniacute přiacuteslušnosti do Active Directory [online] [cit 2016-05-03] Do-stupneacute zhttpsforgepuppetcomtrlinkindomain_membership

36

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

[30] Dokumentace parametrů připojeniacute do Active Directory [online] [cit 2016-04-10]

Dostupneacute zhttpsmsdnmicrosoftcomen-uslibraryaa392154(v=vs85)aspx

[31] Oficiaacutelniacute dokumentace k ACL [online] [cit 2016-05-20] Dostupneacute zhttpsmsdnmicrosoftcomen-uslibrarywindowsdesktopaa374872(v=vs85)aspx

[32] Představeniacute přiacutestupu Puppetu k ACL [online] [cit 2016-05-20] Dostupneacute zhttps puppet com blog managing-permissions-on-windows-access-control-lists

[33] Nabiacutedka Puppet modulů pro windows [online] [cit 2016-05-20] Dostupneacute zhttpsforgepuppetcomtagswindows

[34] Soubor užitečnyacutech Puppet modulů pro Windows [online] [cit 2016-05-20] Dostupneacutezhttpsgithubcompuppetlabspuppetlabs-windows

[35] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute zhttppuppet-lintcom

[36] RHETT Jo Learning puppet 4 Sebastopol OrsquoReilly Media Inc 2015 177-188[37] Testovaciacute knihovna pro Puppet [online] [cit 2016-05-20] Dostupneacute z

httprspec-puppetcom

[38] Testovac9 framework Rspec [online] [cit 2016-05-20] Dostupneacute zhttpwwwrspecinfo

[39] PURVINE-RILEY Branan The Next Generation of Puppet Module Testing [on-line] 2012 [cit 2016-05-20] Dostupneacute zhttpspuppetcomblognext-generation-of-puppet-module-testing

[40] Podpora cloudovyacutech prostřediacute v Puppetu [online] [cit 2016-05-20] Dostupneacute zhttpspuppetcomsolutionscloud-management

[41] FRANCESCHI Alessandro Extending Puppet Packt Publishing 2014 194-197[42] Puppet Modul pro spraacutevu AWS [online] [cit 2016-05-20] Dostupneacute z

httpsgithubcompuppetlabspuppetlabs-aws

37

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Přiacuteloha ASlovniacuteček

ACL Access control listAD Active DirectoryAMI Amazon Machine ImagesAWS Amazon Web ServicesCCA tool Continuous Configuration AutomationCM tool Configuration Management toolDSC Desired State ConfigurationEC2 Elastic Compute CloudIaC Infrastructure as CodeIGW Internet GatewayVPC Virtual Private Cloud

39

  • TITUL
  • Zadani
  • PodekovaniProhlaseni
  • AbstraktAbstract
  • Obsah
  • TabulkyObrazky
  • Uvod
    • Osobni motivace
      • Predstaveni nastroje Puppet
        • Co to je CM tool
          • Jazyk konfiguracniho souboru
          • Styl programovani konfigurace
          • Nastaveni klientskeho stroje
          • Distribucni model pull push
          • Idempotence
            • Puppet
              • Open Source Puppet vs Puppet Enterprise
                • Slovnicek pojmu z prostredi Puppet
                  • Agent Node
                  • Master
                  • Manifest
                  • Modul
                  • Katalog
                    • Dve varianty architektury Puppet infrastruktury
                    • Zdroje Puppetu jako zakladni prvky ovladani systemu
                    • Podporovane platformy
                    • Jak ziskat Puppet
                    • Proc jsem vybral Puppet
                      • Multiplatformni Puppet
                        • Soubory
                        • Uzivatele a skupiny uzivatelu
                        • Sluzby
                        • Zaznamy hosts
                        • Instalace programu
                        • Reboot
                        • Spousteni vlastniho prikazu
                        • Planovane ulohy
                        • Windows registry
                        • Active Directory
                          • Sprava Active Directory
                          • Modul domain--membership
                          • Modul acl
                          • Dalsi moduly pro ovladani prostredi Windows
                              • Testovani
                                • Staticka kotrola kodu
                                • Unit testy
                                • Akceptacni testy
                                • Test Driven Development
                                  • Testovaci prostredi AWS
                                    • Pozadavky na virtualizacni platformu
                                    • Amazon Web services
                                    • Sluzby AWS
                                      • VPC
                                      • EC2
                                      • Route53
                                          • Workflow
                                            • Sprava externich modulu
                                              • Puppet module
                                              • Git Submodule
                                              • Puppetfile
                                                • Udrzovani konfigurace ve verzovacim systemu
                                                • Puppet Environments
                                                • r10k
                                                  • Implementace
                                                    • Specifikace ulohy
                                                    • Vyber technologii
                                                    • Vyvojove prostredi
                                                      • Psani Puppet kodu
                                                      • Navazani komunikace agentu s masterem
                                                      • Nasazeni kodu na vyvojove prostredi
                                                        • Vysledna konfigurace
                                                          • Modul students
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emprograms
                                                          • Modul classroomunhbox x kern 06em vbox hrule width3emtest
                                                              • Otestovani funkcnosti implementace
                                                                • Unit testy
                                                                • Akceptacni testy
                                                                • Testovani struktury vyvojoveho prostredi
                                                                • Dedikovane testovaci stroje
                                                                  • Rozdeleni testu na Windows a Unix
                                                                    • Test driven development
                                                                    • Vysledky testu
                                                                      • Vysledky testu sitove infrastruktury
                                                                      • Vysledky testu testovacich stroju
                                                                      • Vysledky testu agentu
                                                                      • Ukazka reportovaciho nastroje rspec
                                                                          • Zaver
                                                                          • Literatura
                                                                          • Slovnicek

Recommended