Proč porovnávat Ansible, Puppet a Chef
Nástroje pro správu konfigurace automatizují přípravu, konfiguraci a údržbu serverů, aplikací i cloudových služeb. Ansible, Puppet a Chef patří mezi nejpoužívanější – liší se architekturou (push vs. pull), způsobem deklarace stavu, škálováním, modelem rozšíření i ekosystémem. Správná volba závisí na požadavcích na idempotenci, rychlost, governance, compliance a integraci do CI/CD a cloudu.
Architektonické modely a topologie
- Ansible: bezagentový model push. Řídicí uzel spouští playbooky přes SSH/WinRM. Inventář definuje cíle, moduly provádějí idempotentní změny. Jednoduché nasazení, menší trvalá režie control plane.
- Puppet: model agent–server pull. Agent si periodicky (typicky každých 30 minut) stahuje katalog ze serveru (Puppet Server/Compiler), aplikuje zdrojové resources a hlásí stav. Silný model desired state, výborný pro detekci odchylek a compliance.
- Chef: primárně model agent–server pull (Chef Infra Client & Server), alternativně Chef Solo/Zero bez serveru. Konfigurace v Ruby (recipes, cookbooks). Vhodný pro komplexní, procedurálnější logiku.
Jazyk a vyjadřovací prostředky
| Nástroj | Jazyk/DSL | Styl | Rozšiřitelnost |
|---|---|---|---|
| Ansible | YAML (deklarativní úlohy), šablonování Jinja2 | Orientace na úlohy, role, kolekce | Moduly v Pythonu, pluginy, filtry |
| Puppet | Puppet DSL (deklarativní) | Resource + Class, datová vrstva Hiera | Typy/providery v Ruby, moduly Forge |
| Chef | Ruby DSL (recepty) | Orientace na prostředky, procedurální prvky | Vlastní prostředky, knihovny v Ruby |
Idempotence, desired state a detekce odchylek
- Ansible: moduly navržené jako idempotentní (
state: present/absent), check mode, diff. Odchylky zjistíte spuštěním podle plánu (cron/ACI pipeline) a prostřednictvím reportů z běhů. - Puppet: vestavěná kontrola odchylek při každém agent run. Katalog je zdrojem pravdy; k dispozici jsou reporty compliance a enforcement změn.
- Chef: každé converge porovnává aktuální a cílový stav; why-run slouží k simulacím. Handlery zajišťují kvalitní záznamy změn.
Inventář, proměnné a správa tajemství
- Ansible: inventory (INI/YAML/dynamický), group_vars a host_vars, Ansible Vault pro šifrované proměnné. Snadná integrace s dynamickými zdroji (AWS, Azure, VMware, Kubernetes).
- Puppet: Hiera (YAML/JSON) pro hierarchické proměnné, eyaml/KMS pro šifrování. Facter poskytuje informace o hostiteli.
- Chef: Data Bags/Encrypted Data Bags, atributy na úrovni cookbooků, rolí a prostředí; Ohai poskytuje informace o hostiteli.
Škálování, výkon a provoz
- Ansible: paralelismus prostřednictvím forks, strategy plugins, async/poll, pipelining. Ve velkých prostředích se používá Automation Platform/AWX (UI, RBAC, plánovač, exekutory).
- Puppet: horizontální škálování prostřednictvím více compilerů, cachování a izolace environment. Agent běží periodicky – v čase má malý dopad na řídicí vrstvy.
- Chef: škálování Chef Serveru (PostgreSQL/Solr/NGINX), policyfiles pro deterministická sestavení, push jobs pro ad hoc akce.
Orchestrace vs. konfigurace
Ansible vyniká v orchestraci vícekrokových procesů (rolling deploy, údržba), kde jsou zásadní posloupnost kroků a podmínky. Puppet a Chef jsou silné v průběžném udržování stavu a dlouhodobé compliance; orchestraci řeší spíše doplňky nebo externí nástroje (runnery, Pipelines, Rundeck).
Windows, sítě, kontejnery a cloud
- Windows: Ansible (WinRM, moduly DSC), Puppet (nativní prostředky Windows, integrace s DSC), Chef (cookbooky pro Windows, PowerShell DSC). Puppet má historicky nejucelenější model politik.
- Síť: Ansible má rozsáhlý katalog síťových modulů (Arista/Cisco/Juniper), vhodný pro automatizaci day 0–2. Puppet a Chef podporují síťová zařízení, ale nabídka modulů je užší.
- Kontejnery/Kubernetes: Ansible podporuje imperativní operace i deklarativní konfiguraci (modul k8s, Helm), Puppet/Chef se používají spíše pro hostitele/CI; policy-as-code se přesouvá do nástrojů typu Argo CD/Flux (GitOps).
- Cloud: všechny tři nástroje mají poskytovatele/pluginy. Ansible umožňuje rychle začít s provisioningem (VM, VPC, IAM); Puppet je výborný pro správu politik a dlouhodobých odchylek; Chef využívá logiku Ruby pro komplexní kroky sestavení.
Testování, kvalita a GitOps
- Ansible: Molecule pro testování rolí (lokálně/Docker/cloud), ansible-lint, CI pipeline (lint → syntax-check → molecule).
- Puppet: rspec-puppet, PDK, puppet-lint, beaker pro integrační testy. Silný pracovní postup s environment a větvemi.
- Chef: Test Kitchen, InSpec (testy compliance), Foodcritic (lint). Policyfiles umožňují deterministická sestavení s verzováním v Gitu.
Bezpečnost, RBAC a audit
- Ansible: AWX/Automation Controller poskytuje RBAC, credential store, izolované exekutory a audit běhů.
- Puppet: podrobně nastavitelný RBAC, certifikáty pro agenty, reporting a compliance (lze doplnit modul InSpec/Compliance).
- Chef: RBAC v Chef Manage/Automate, Automate pro audit, InSpec pro bezpečnostní testy a politiky.
Ekosystém, moduly a komunita
- Ansible Galaxy: velké množství rolí a kolekcí; pozor na kvalitu, doporučuje se interní kurátorství.
- Puppet Forge: modulární ekosystém s hodnocením, časté jsou moduly pro operační systémy, middleware a databáze.
- Chef Supermarket: cookbooky pro operační systémy a aplikace, menší než Galaxy/Forge, ale kvalitní pro základní technologický stack.
Učící křivka a produktivita týmu
- Nejrychlejší začátek: Ansible (YAML, bez agentů, SSH). Ideální pro týmy přecházející od ručních skriptů.
- Strmější, ale stabilní křivka: Puppet (DSL, uvažování v resources, Hiera). Přínos se projeví při správě rozsáhlých flotil a zajišťování compliance.
- Programátorská flexibilita: Chef (Ruby DSL). Vhodný tam, kde je třeba složitá kontrola toku a logika knihoven.
Příklady zápisů konfigurace
Ansible – instalace balíčku a šablona:
- hosts: web become: yes tasks: - name: Nginx nainstalován ansible.builtin.package: name: nginx state: present - name: Konfigurace ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: restart nginx handlers: - name: restart nginx ansible.builtin.service: name: nginx state: restarted
Puppet – deklarace balíčku/souboru/služby:
package { 'nginx': ensure => installed } file { '/etc/nginx/nginx.conf': ensure => file, content => template('site/nginx.conf.erb'), notify => Service['nginx'], } service { 'nginx': ensure => running, enable => true, }
Chef – recept:
package 'nginx' template '/etc/nginx/nginx.conf' do source 'nginx.conf.erb' notifies :restart, 'service[nginx]' end service 'nginx' do action [:enable, :start] end
Scénáře nasazení a vhodnost použití
- Rychlá automatizace a práce ad hoc, heterogenní prostředí ➝ Ansible.
- Dlouhodobé vynucování stavu, auditní stopa a pravidelné reporty ➝ Puppet.
- Komplexní sestavení/konfigurace s bohatou logikou, DevOps s Ruby stackem ➝ Chef.
Náklady, podpora a provozní režie
- Open-source edice: všechny tři nástroje existují v komunitních verzích; podnikové varianty přidávají UI, RBAC, podporu a compliance.
- Provozní režie: Ansible má minimální počáteční režii (žádní agenti), Puppet/Chef vyžadují údržbu serveru/CA/úložišť, ale usnadňují dlouhodobý provoz.
Integrace do CI/CD a GitOps
- Ansible: pipeline (lint → syntax → dry-run → deploy), kolekce v artefaktorech, kontejnerizované běhy ansible-navigator/EE.
- Puppet: environments mapovaná na větve Gitu, Code Manager, schvalovací pracovní postup s PDK.
- Chef: policyfiles a pevné určení verzí, Test Kitchen v CI, testy InSpec jako kontrolní brány.
Compliance a bezpečnostní politiky
- Ansible: role pro CIS/posílení zabezpečení OS, validace pomocí Molecule + InSpec; snadná aplikace jednorázových politik.
- Puppet: silný model state enforcement, reportování souladu, integrace se zjišťováním informací (Facter) a Hiera pro varianty politik.
- Chef: InSpec jako prvotřídní nástroj – bezpečnostní testy jako kód; Automate pro přehledové panely souladu.
Výhody a nevýhody ve zkratce
| Nástroj | Silné stránky | Slabé stránky |
|---|---|---|
| Ansible | Bez agentů, rychlý začátek, orchestrace, bohatá nabídka modulů pro síť/cloud | Bez trvalého agenta hůře detekuje a řeší odchylky bez plánovače; výkon omezuje latence/SSH |
| Puppet | Průběžné vynucování stavu, detekce odchylek, škálovatelnost, Hiera | Složitější DSL, nutnost provozovat server/CA, méně pohodlná orchestrace ad hoc |
| Chef | Flexibilní Ruby DSL, silné testování (InSpec), policyfiles | Vyšší nároky na znalost Ruby, režie serveru, menší komunita než u Ansible |
Rozhodovací matice podle požadavků
| Požadavek | Doporučení | Poznámka |
|---|---|---|
| Rychlý začátek, bez agentů | Ansible | Ideální pro kombinaci Linux/Windows/síť |
| Průběžné vynucování politik a compliance | Puppet | Agent pull + reporty |
| Složitá logika, rozsáhlé úpravy na míru | Chef | Ruby DSL + vlastní prostředky |
| Automatizace sítě | Ansible | Široká podpora výrobců |
| Rozsáhlá podniková flotila s auditem | Puppet / Chef | RBAC, řízení odchylek, compliance |
Migrační strategie a souběžný provoz
- Souběžný provoz: Ansible pro orchestraci/provisioning, Puppet/Chef pro stabilní provozní stav. Jasné vymezení odpovědností.
- Migrace: inventarizace zdrojů, mapování modulů/rolí, testy v sandboxu, postupné nasazení canary, paralelní běhy v režimech noop (Puppet –noop, Chef why-run, Ansible check).
- Standardizace: definujte standardy programování, strukturu repozitářů, pojmenovávání a verzování artefaktů podle semver.
Kontrolní seznam před nasazením do produkce
- Repozitáře s CI (lint, unit/integration, bezpečnostní skenování), podepisování artefaktů (SLSA/attestace).
- Správa tajemství (Vault/KMS), rotace klíčů, just enough permissions.
- Logování a observabilita (centralizované protokoly běhů, metriky, upozornění na odchylky/chyby).
- Runbooky pro incidenty, nouzové přístupy break-glass, feature flags/policyfiles.
- Školení týmu a standardy revize kódu (min. 2 páry očí, bezpečnostní kontrolní seznam).
Závěr
Neexistuje jeden „správný“ nástroj pro všechny případy. Ansible vyniká rychlou orchestrací bez agentů a širokou modulární podporou. Puppet poskytuje robustní, auditovatelný a škálovatelný mechanismus desired state s automatickým vynucováním a detekcí odchylek. Chef nabízí nejvyšší flexibilitu pro komplexní logiku a důkladné testování compliance díky InSpec a policyfiles. Při výběru zohledněte charakter provozu (ad hoc vs. stabilní stav), požadavky na compliance, velikost a dovednosti týmu i stávající ekosystém. Často se vyplácí kombinace: Ansible pro provisionování/orchestraci a Puppet/Chef pro dlouhodobé udržování stavu.
