Proč porovnávat Ansible, Puppet a Chef
Nástroje pro správu konfigurací automatizují provisionování, 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ý push model. Řídicí uzel spouští playbooky přes SSH/WinRM. Inventář definuje cíle, moduly provádí idempotentní změny. Jednoduché nasazení, menší trvalý control-plane overhead.
- Puppet: agent–server pull. Agent periodicky (typ. 30 min) stahuje katalog ze serveru (Puppet Server/Compiler), aplikuje zdrojové resources a reportuje stav. Silný model desired state, výborný pro drift detection a compliance.
- Chef: primárně 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), Jinja2 templating | Task-based, role, kolekce | Python moduly, pluginy, filtry |
| Puppet | Puppet DSL (deklarativní) | Resource + Class, Hiera datová vrstva | Ruby typy/providery, moduly Forge |
| Chef | Ruby DSL (recepty) | Resource-driven, procedurální prvky | Custom resources, knihovny v Ruby |
Idempotence, desired state a detekce drifů
- Ansible: moduly navržené idempotentně (
state: present/absent), check mode, diff. Drift detekujete spuštěním plánovačem (cron/ACI pipeline) a reporty z běhů. - Puppet: vestavěná kontrola driftu při každém agent run. Katalog je zdroj pravdy; compliance reporty a enforcement změn.
- Chef: každé converge porovnává aktuální a cílový stav; why-run pro simulace. Dobré logy změn díky handlerům.
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 fakta o hostu.
- Chef: Data Bags/Encrypted Data Bags, atributy na úrovni cookbooks/rolí/environmentů; Ohai pro fakta.
Škálování, výkon a provoz
- Ansible: paralelismus přes forks, strategy plugins, async/poll, pipelining. Pro velká prostředí se používá Automation Platform/AWX (UI, RBAC, plánovač, exekutora).
- Puppet: horizontální škálování přes víc compilerů, caching, environment izolace. Agent běží periodicky – nízký dopad na řídicí vrstvy v čase.
- Chef: škálování Chef Serveru (PostgreSQL/Solr/NGINX), policyfiles pro deterministické sestavy, push jobs pro ad-hoc akce.
Orchestrace vs. konfigurace
Ansible vyniká v orchestraci vícekrokových procesů (rolling deploy, maintenance), kde posloupnost kroků a podmínky hrají prim. Puppet a Chef jsou silné v kontinuální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, DSC moduly), Puppet (nativní Windows resources, integrace s DSC), Chef (Windows cookbooky, PowerShell DSC). Puppet má historicky nejucelenější model politik.
- Síť: Ansible má rozsáhlý katalog síťových modulů (Arista/Cisco/Juniper), vhodné pro day 0–2 automatizaci. Puppet a Chef síť umí, ale menší šířka modulů.
- Kontejnery/Kubernetes: Ansible pro imperativní operace i deklaraci (k8s modul, Helm), Puppet/Chief spíše pro hosty/CI; policy-as-code se přesouvá do nástrojů typu Argo CD/Flux (GitOps).
- Cloud: všechny tři mají poskytovatele/plug-iny. Ansible má rychlou křivku pro provisioning (VM, VPC, IAM); Puppet výborný pro policy a dlouhodobý drift; Chef uplatní Ruby logiku pro komplexní build kroky.
Testování, kvalita a GitOps
- Ansible: Molecule pro testy 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ý environment workflow s branches.
- Chef: Test Kitchen, InSpec (compliance testy), Foodcritic (lint). Policyfiles přinášejí deterministické sestavení s Git verzemi.
Bezpečnost, RBAC a audit
- Ansible: AWX/Automation Controller poskytuje RBAC, credential store, izolované exekutory, audit běhů.
- Puppet: granulární RBAC, certifikáty pro agenty, reporting a compliance (InSpec/Compliance modul je možné doplnit).
- 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čený interní kurátor.
- Puppet Forge: modulární ekosystém s hodnocením, časté moduly pro OS, middleware a DB.
- Chef Supermarket: cookbooky pro OS/aplikace, menší než Galaxy/Forge, ale kvalitní pro core stack.
Učící křivka a produktivita týmu
- Nejrychlejší start: Ansible (YAML, bez agentů, SSH). Ideální pro týmy přecházející z ručních skriptů.
- Strmá, ale stabilní křivka: Puppet (DSL, myšlení ve resources, Hiera). Odmění se v řízení velkých flotil a compliance.
- Programátorská flexibilita: Chef (Ruby DSL). Silný tam, kde je třeba složitá kontrola toku a knihovní logika.
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
Nasazovací scénáře a vhodnost použití
- Rychlá automatizace a ad-hoc práce, heterogenní prostředí ➝ Ansible.
- Dlouhodobé vynucování stavu, auditní stopa a pravidelné reporty ➝ Puppet.
- Komplexní build/konfig s bohatou logikou, DevOps s Ruby stackem ➝ Chef.
Náklady, podpora a provozní režie
- Open-source edice: všechny tři existují v komunitních verzích; enterprise 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 artefaktory, ansible-navigator/EE kontejnerizované běhy.
- Puppet: environments mapované na Git branche, Code Manager, schvalovací workflow s PDK.
- Chef: policyfiles a version pinning, Test Kitchen v CI, InSpec testy jako gates.
Compliance a bezpečnostní politiky
- Ansible: role pro CIS/OS hardening, validace přes Molecule + InSpec; snadná aplikace jednorázových politik.
- Puppet: silný model state enforcement, reporting shod, integrace s discovery (Facter) a Hiera pro varianty politik.
- Chef: InSpec jako první třída – testy bezpečnosti jako kód; Automate pro dashboardy shody.
Výhody a nevýhody ve zkratce
| Nástroj | Silné stránky | Slabé stránky |
|---|---|---|
| Ansible | Bez agentů, rychlý start, orchestrace, bohaté moduly pro síť/cloud | Bez trvalého agenta hůř detekuje/řeší drift bez plánovače; výkon omezen latencí/SSH |
| Puppet | Stálé vynucení stavu, drift detection, škálovatelnost, Hiera | Složitější DSL, nutnost provozovat server/CA, méně pohodlná ad-hoc orchestracie |
| Chef | Flexibilní Ruby DSL, silné testy (InSpec), policyfiles | Vyšší nároky na znalost Ruby, serverová režie, menší komunita než Ansible |
Rozhodovací matice podle požadavků
| Požadavek | Doporučení | Poznámka |
|---|---|---|
| Rychlý start, bez agentů | Ansible | Ideální pro mix Linux/Windows/síť |
| Trvalé vynucení politik a compliance | Puppet | Agent pull + reporty |
| Složitá logika, heavy customizace | Chef | Ruby DSL + custom resources |
| Síťová automatizace | Ansible | Široká podpora vendorů |
| Velká enterprise flotila s auditem | Puppet / Chef | RBAC, drift control, compliance |
Migrační strategie a koexistence
- Koexistence: Ansible pro orchestraci/provisioning, Puppet/Chef pro steady-state. Jasná hranice odpovědností.
- Migrace: inventarizace zdrojů, mapování modulů/rolí, testy v sandboxu, canary rollout, paralelní běhy s noop režimy (Puppet –noop, Chef why-run, Ansible check).
- Standardizace: definujte coding standards, strukturu repozitářů, naming a semver verzování artefaktů.
Checklist před produkčním nasazením
- Repozitáře s CI (lint, unit/integration, security scan), podepisování artefaktů (SLSA/attestace).
- Správa tajemství (Vault/KMS), rotace klíčů, just enough permissions.
- Logování a observabilita (centralizované logy běhů, metriky, alerty na drift/fail).
- Runbooky pro incidenty, break-glass přístupy, feature flags/policyfiles.
- Školení týmu a code review standardy (min. 2 páry očí, bezpečnostní checklist).
Závěr
Neexistuje „jeden správný“ nástroj pro všechny případy. Ansible exceluje v rychlé, bezagentové orchestraci a široké modulární podpoře. Puppet poskytuje robustní, auditovatelný a škálovatelný mechanismus desired state s automatickým vynucením a detekcí driftu. Chef nabízí nejvyšší flexibilitu pro komplexní logiku a přísné testování compliance díky InSpec a policyfiles. Při výběru zohledněte charakter provozu (ad-hoc vs. steady-state), požadavky na compliance, velikost a dovednosti týmu i existující ekosystém. Často se vyplácí kombinace: Ansible pro provision/orchestrace a Puppet/Chef pro dlouhodobé udržení stavu.