Differenza Ansible Puppet
è fondamentale capire la differenza tra Puppet e Ansible, perché fanno cose simili (gestione automatizzata di sistemi), ma seguono filosofie e architetture completamente diverse.
Architettura
Caratteristica
Puppet
Ansible
Architettura principale
Master/Agent (server centrale + agenti installati su ogni nodo)
Agentless (niente agent: controlla via SSH o API)
Server centrale
Richiede un Puppet Server (puppetserver
)
Non serve nessun server dedicato (basta avere Ansible installato su una macchina)
Comunicazione
L’agente si connette periodicamente al master per ricevere le configurazioni
Ansible si connette on demand ai nodi e applica i playbook
Autenticazione
Basata su certificati SSL tra master e agenti
Basata su SSH (o WinRM per Windows)
Puppet funziona in modo continuo e centralizzato, Ansible è stateless e push-based (esegue solo quando lanci i comandi).
Modalità di lavoro
Aspetto
Puppet
Ansible
Metodo di esecuzione
Pull: gli agenti “tirano giù” la configurazione dal master a intervalli regolari
Push: il controller “spinge” le configurazioni sui nodi target
Frequenza
Esecuzione automatica ogni 30 minuti circa (di default)
Eseguito solo quando si lancia manualmente un playbook
Gestione continua
Automatizzata e periodica
Manuale o tramite scheduling esterno (es. cron, Jenkins)
Linguaggio e file di configurazione
Elemento
Puppet
Ansible
Linguaggio
Puppet DSL (simile a Ruby, dichiarativo)
YAML (dichiarativo + procedurale)
Unità base
Manifest e Module
Playbook e Role
Stile
Descrivi lo stato desiderato (“questo file deve esistere”)
Descrivi le operazioni (“crea questo file”)
Esempio equivalente
Puppet
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
}
Ansible
- hosts: all
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Ensure nginx is running
service:
name: nginx
state: started
enabled: yes
Puppet descrive lo stato finale, Ansible descrive le azioni da compiere.
Filosofia
Aspetto
Puppet
Ansible
Paradigma
Declarativo → “come deve essere”
Procedurale + Declarativo → “come arrivarci”
Convergenza automatica
Sì, l’agente corregge lo stato automaticamente
No, devi rilanciare il playbook
Gestione del cambiamento
Continua, con report e cataloghi centralizzati
Manuale o tramite CI/CD
Installazione e manutenzione
Aspetto
Puppet
Ansible
Facilità di setup
Più complesso (server, certificati, agenti)
Molto semplice (solo installare Ansible sul controller)
Aggiornamenti
Ogni nodo deve mantenere il suo agente aggiornato
Nessun software sui target: basta aggiornare Ansible
Scalabilità
Ottima per ambienti grandi e stabili
Ottima per automazione e provisioning veloce
Integrazione con altri strumenti
Funzione
Puppet
Ansible
Monitoraggio continuo
Sì (rapporto periodico)
No (solo a runtime)
Integrazione CI/CD
Possibile ma più pesante
Nativa (GitLab CI, Jenkins, ecc.)
Integrazione cloud
Moduli Puppet specifici
Ampio supporto nativo per AWS, Azure, GCP
Riassunto sintetico
Punto chiave
Puppet
Ansible
Tipo
Sistema di gestione della configurazione (CM)
Strumento di automazione (CM + orchestrazione)
Architettura
Master/Agent
Senza agenti
Modalità
Pull (periodico)
Push (manuale/on demand)
Linguaggio
Puppet DSL (simile a Ruby)
YAML
Setup
Più complesso
Molto semplice
Uso tipico
Gestione continua di server a lungo termine
Automazione, provisioning, deployment
Esecuzione
Automatica a intervalli regolari
Manuale o tramite pipeline
Quando usare cosa
Usare Puppet se:
Si hanno centinaia di server stabili e persistenti (es. data center);
Si vuole una gestione continua e autonoma delle configurazioni;
Serve un catalogo centralizzato di compliance e stato dei nodi.
Usare Ansible se:
si vuole un setup rapido e senza agent;
Si fa provisioning dinamico o deploy temporanei (es. cloud, container);
Serve un linguaggio più leggibile (YAML) e integrazione DevOps immediata.
Puppet = “Io definisco come deve essere il sistema, e lui si mantiene così da solo.”
Ansible = “Io dico cosa fare e lo eseguo immediatamente quando voglio.”
Last updated