Ansible, Puppet a Chef: srovnání nástrojů pro správu konfigurací

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).