Proč automatizovat a kde dává smysl
Automatizace infrastruktury zkracuje dobu dodání změn, snižuje chybovost, zvyšuje konzistenci a zlepšuje bezpečnost. V ekosystému nástrojů pro IT proces automation patří mezi nejrozšířenější Ansible, Puppet a Chef. Každý přistupuje k infrastruktuře jako k kódu, ale liší se architekturou (agent vs. agentless), jazykem deklarace, modelem stavu, škálováním a integracemi. Tento článek systematicky srovnává jejich principy, silné a slabé stránky a nabízí praktická doporučení pro návrh, provoz a bezpečnost.
Architektonické modely a provozní paradigma
- Ansible: agentless model nad SSH/WinRM. Řízený z řídicího uzlu (control node) spouštěním playbooků proti inventáři hostů. Jednoduchý start, silná ad-hoc orchestrace a konfigurační změny bez trvalých agentů.
- Puppet: agent–server model. Puppet agent periodicky (typicky 30 min) táhne catalog z Puppet Serveru a konverguje ke stavu definovanému v manifestech. Stabilní drift management a deklarativní compliance.
- Chef: agent–server (chef-client komunikuje s Chef Serverem). Konfigurace v Ruby DSL (recipes, cookbooks), silný ekosystém opakovatelných stavebních bloků a flexibilní logika.
Jazyk, model stavu a idempotence
- Deklarativní vs. imperativní: Puppet je výrazně deklarativní (popíšete cílový stav). Chef a Ansible kombinují deklarativní zdroje s možnostmi imperativního toku (posloupnost úloh, podmínky).
- Idempotence: všechna tři řešení se snaží, aby opakované spuštění nezpůsobilo nežádoucí změny. Závisí na kvalitě modulů/zdrojů a správné parametrizaci.
- Správa závislostí: Puppet používá vztahy a resource graph, Chef notifikace a pořadí v receptech, Ansible sekvenční úlohy a handlers pro reakce na změny.
Inventář, cílení a škálování
- Ansible inventory: statické INI/YAML, dynamické pluginy (cloudy, CMDB), proměnné na úrovni hostů/skupin. Škáluje horizontálně přes forks, strategy, ansible-pull a AWX/Ansible Automation Platform pro plánování a RBAC.
- Puppet: centrální evidence uzlů v PuppetDB, cílení přes node definitions, classifier a faktory (Facter). Master/compile farmy pro velké prostředí.
- Chef: Chef Server s objekty nodes, roles, environments a data bags, flexibilní search pro dynamické přiřazování.
Ekosystém modulů a rozšíření
- Ansible: rozsáhlé collections a moduly pro OS, sítě, cloud, kontejnery. Ideální pro multi-cloud orchestrace, síťové prvky a jednorázové „runbook“ operace.
- Puppet Forge: standardizované moduly s verzemi a závislostmi. Silné pro dlouhodobou správu systémových rolí (uživatelé, služby, balíčky, compliance).
- Chef Supermarket: cookbooks s opakovatelnými vzory. Výhodou je Ruby DSL pro komplexní logiku a test-kitchen pro testování receptů.
Bezpečnost a tajemství (secrets)
- Transport: Ansible přes SSH/WinRM (doporučeno mTLS/just-in-time přístup), Puppet a Chef používají agent–server komunikaci s certifikáty a ověřením uzlů.
- Secrets management: Ansible Vault (symetrické šifrování proměnných/souborů), integrace s externími KMS. Puppet Hiera s backendy (např. HashiCorp Vault), Chef Encrypted Data Bags a integrace s KMS/HSM.
- RBAC a audit: Ansible Tower/AAP, Puppet Enterprise a Chef Automate poskytují centralizované RBAC, audit trail, schvalování a politiky.
Continuous Integration/Delivery a testování
- Lint a statická analýza: ansible-lint, puppet-lint, foodcritic/cookstyle pro Chef. Zajišťují styl, bezpečnost a idempotenci.
- Jednotkové a integrační testy: Molecule (Ansible), RSpec-Puppet/rspec-hiera (Puppet), Test Kitchen + InSpec (Chef). Testujte lokálně, v kontejnerech i proti skutečným obrazům OS.
- CI/CD pipeline: uložení všeho v Git, peer review, automatické buildy kolekcí/modulů/cookbooků, podepisování artefaktů a publikace do interních registrů.
Observabilita, drift a compliance
- Drift detection: Puppet a Chef díky periodickým běhům rychle identifikují a opravují odchylky od deklarovaného stavu. U Ansible je vhodné plánovat pravidelné konvergenční běhy či použít ansible-pull.
- Reporting: PuppetDB a Chef Automate poskytují detailní přehled o změnách, chybách a stavu uzlů. Ansible AWX/Tower generuje reporty o bězích, změnách a selháních.
- Policy-as-Code: integrace s nástroji typu Open Policy Agent/InSpec pro audit balíčků, služeb, portů, práv a kryptografických politik.
Cloud, kontejnery a moderní prostředí
- Cloud: Ansible exceluje v provisioning/orchestration (VPC, IAM, load balancery). Puppet/Chef udržují trvalý stav instancí a konfigurace.
- Kubernetes: všechny tři používané spíše pro day-0/1 (bootstrap uzlů, instalace runtime, CSI/CNI). Aplikační nasazení v K8s má preferovat nativní manifesty/Helm/Argo CD.
- Immutable infrastruktura: v kombinaci s Packer/Terraform vytvářejte zlaté obrazy; Ansible skvělé pro image baking, Puppet/Chef pro post-boot drift control.
Windows a síťové prvky
- Windows: Ansible (WinRM moduly), Puppet (nativní Windows zdroje), Chef (silná podpora Windows služeb a DSC integrace). Volba závisí na požadované hloubce správy GPO/DSC a existujících dovednostech.
- Síť: Ansible nabízí široké spektrum modulů pro síťová zařízení a idempotentní playbooky. Puppet/Chef využívány spíše ve specializovaných modulech nebo pro server-side část síťových služeb.
Výkonnost a škálování řídicích prvků
- Ansible: zvyšujte paralelizaci (forks), používejte strategy free, async/poll, mitogen (pokud vyhovuje) a persistent connections. Pro velké flotily nasadit více control node a execution environments.
- Puppet: škáluje přes více compiler uzlů a load balancing, optimalizujte Hiera dotazy a katalogy, tunujte JRuby pool na serveru.
- Chef: horizontální škálování Chef Serveru, optimalizace cookbooků a využití policyfiles pro replikovatelné buildy.
Tabulkové srovnání
| Kritérium | Ansible | Puppet | Chef |
|---|---|---|---|
| Architektura | Agentless (SSH/WinRM) | Agent–server (pull) | Agent–server (pull) |
| Jazyk | YAML (playbooks), Jinja templating | DSL deklarativní (manifesty) | Ruby DSL (recipes/cookbooks) |
| Silná stránka | Orchestrace, multi-cloud, rychlý start | Trvalý stav, drift, compliance | Flexibilita logiky, testovací ekosystém |
| Learning curve | Nízká až střední | Střední (resource model) | Vyšší (Ruby, patterns) |
| Use-case | Provisioning, ad-hoc, image baking | Dlouhodobá správa serverů | Komplexní konfigurace a pipelines |
| Enterprise nástroje | AWX/AAP | Puppet Enterprise + PuppetDB | Chef Automate/Infra/Compliance |
Doporučené postupy pro návrh a organizaci kódu
- Repozitář a verzování: monorepo s jasnou strukturou nebo polyrepo podle týmů; semantic versioning modulů/collections/cookbooks.
- Oddělení dat a logiky: proměnné (group_vars/host_vars v Ansible, Hiera v Puppet, data bags v Chef) držte mimo kód; udržujte prostředí (dev/test/prod) odděleně.
- Idempotence a re-run bezpečnost: důsledně testujte opakovatelnost; žádné skryté side-effecty.
- Konvence a styl: lint, pre-commit hooky, code review, dokumentace modulu/role.
Bezpečnostní a provozní guard-rails
- Princip nejmenších oprávnění: limitujte klíče a účty, použijte just-in-time přístup a audit.
- Šifrování a rotace tajemství: Vault/Hiera/data bags s pravidelnou rotací; žádná tajemství v logách.
- Change management: schvalovací workflow, canary nasazení, dry-run (Ansible check mode, Puppet noop, Chef why-run) před aplikací změn.
Integrace s IaC a platformami
- Terraform: deklarativní provisioning infrastruktury; konfiguraci instancí následně přebírá Ansible/Puppet/Chef.
- Packer: image baking s Ansible nebo Chef; rychlé škálování s immutable obrazy.
- Service catalogs: portálové samoobsluhy spouští playbooky/run-listy s parametry a RBAC.
Typické anti-patterny a jak se jim vyhnout
- Imperativní skriptování v YAML/Ruby bez respektu ke stavu: vede k ne-idempotenci. Preferujte deklarativní zdroje a kontrolu stavu.
- Jedno obří playbook/manifest/recipe: rozdělte do rolí/modulů/cookbooků, znovupoužitelnost a testy.
- Mix tajemství v plain textu: vždy šifrovat a auditovat přístupy.
- Bez testů: zaveďte Molecule/Test Kitchen a lint do CI od začátku.
Rozhodovací rámec: který nástroj zvolit
- Požadavek na agenty: přísná politika bez agentů a potřeba ad-hoc orchestrace svědčí pro Ansible.
- Trvalá konvergence a compliance: preferujte Puppet (nebo Chef) v prostředích s vysokými nároky na drift management.
- Programovatelnost a komplexní logika: Chef poskytuje bohaté Ruby DSL, hodí se do týmů se silnou vývojářskou kulturou.
- Ekosystém a dovednosti týmu: volte podle toho, co tým ovládá a jaké moduly jsou k dispozici pro vaše platformy.
- Prevailing platform: síťové orchestrace a multi-cloud provisioning preferuje Ansible; heterogenní servery s důrazem na compliance preferují Puppet; komplexní buildy a pipelines mohou těžit z Chef.
Příklady scénářů nasazení
- Enterprise Linux flotila: Puppet pro baseline (uživatelé, audit, balíčky, služby) + Ansible pro orchestraci změn a rollout release.
- Hybrid multi-cloud: Ansible pro provisioning VPC, IAM, load balancerů a konfiguraci aplikací; Terraform pro IaC; Chef pro specifické aplikační role s bohatou logikou.
- Finanční instituce s compliance: Puppet Enterprise s reportingem a InSpec; řízené změny přes GitOps a schvalování.
Závěr: automatizace jako disciplína, ne jen nástroj
Ansible, Puppet a Chef představují tři osvědčené cesty k infrastructure as code. Volba není binární: v praxi se často kombinuje silná stránka každého. Klíčem k úspěchu jsou standardy, testování, bezpečné nakládání s tajemstvími, observabilita a průběžná konvergence k požadovanému stavu. Postavte automatizaci na měřitelných cílech (MTTR, míra driftu, čas nasazení) a udržujte ji jako živou disciplínu – jen tak zůstane spolehlivým základem pro škálovatelný a bezpečný provoz.