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