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ějí idempotentní změny. Jednoduché nasazení, menší trvalá control-plane režie.
- Puppet: agent-server pull. Agent periodicky (obvykle každých 30 min) stahuje katalog ze serveru (Puppet Server/Compiler), aplikuje zdrojové resources a reportuje stav. Silný model desired state, ideální pro detekci driftu 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ější procedurální 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 driftů
- Ansible: moduly navržené idempotentně (
state: present/absent), check mode, diff. Drift detekujete spuštěním plánovačem (cron/CI pipeline) a reporty z běhů. - Puppet: vestavěná kontrola driftu při každém agent run. Katalog je zdrojem 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 hostiteli.
- 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č, exekutor).
- Puppet: horizontální škálování přes více compilerů, caching, izolace environmentů. 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 disponuje rozsáhlým katalogem síťových modulů (Arista/Cisco/Juniper), vhodných pro day 0–2 automatizaci. Puppet a Chef podporují síť, ale s menší šířkou modulů.
- Kontejnery/Kubernetes: Ansible pro imperativní operace i deklaraci (k8s modul, Helm), Puppet/Chef 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/pluginy. Ansible nabízí rychlou křivku pro provisioning (VM, VPC, IAM); Puppet exceluje v politice a dlouhodobém driftu; Chef využívá 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 větvemi.
- 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 lze 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/konfigurace 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 a 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, ansible-navigator/EE kontejnerizované běhy.
- Puppet: environments mapované na Git větve, Code Manager, schvalovací workflow s PDK.
- Chef: policyfiles a version pinning, Test Kitchen v CI, InSpec testy jako gating.
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 first class citizen – testy bezpečnosti jako kód; Automate pro přehledy shody.
Výhody a nevýhody ve zkratce
| Nástroj | Silné stránky | Slabé stránky |
|---|---|---|
| Ansible | Bez agentů, rychlý start, orchestraci, bohaté moduly pro síť/cloud | Bez trvalého agenta hůře detekuje/řeší drift bez plánovače; výkon omezen latencí/SSH |
| Puppet | Stálé vynucení stavu, detekce driftu, škálovatelnost, Hiera | Složitější DSL, nutnost provozovat server/CA, méně pohodlná ad-hoc orchestraci |
| Chef | Flexibilní Ruby DSL, silné testy (InSpec), policyfiles | Vyšší nároky na znalost Ruby, režie serveru, 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, kontrola driftu, compliance |
Migrační strategie a koexistence
- Koexistence: Ansible pro orchestraci/provisioning, Puppet/Chef pro steady-state. Jasné vymezení 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 testy, security scan), podepisování artefaktů (SLSA/attestace).
- Správa tajemství (Vault/KMS), rotace klíčů, princip 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 (minimálně dvojí kontrola, bezpečnostní checklist).



























