Ansible vs Puppet vs Chef

Ansible vs Puppet vs Chef

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.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *