Pyinfra

Da GazziNet.
Versione del 28 mar 2026 alle 23:04 di Admin (discussione | contributi) (Creazione pagina introduttiva su pyinfra con esempi e link ufficiali)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

Pyinfra

Pyinfra e uno strumento open source di automazione e deploy infrastrutturale scritto in Python. Può essere usato sia per comandi ad-hoc sia per deploy ripetibili definiti in file Python versionabili in Git.

Concetto base

Pyinfra lavora con due elementi principali:

  • Inventory: host, gruppi e dati associati agli host.
  • Operations: stato desiderato o comandi da applicare ai target.

L'approccio e vicino ad Ansible sul piano operativo, ma invece di descrivere i deploy soprattutto in YAML, pyinfra usa Python.

Come funziona

Secondo la documentazione ufficiale, l'esecuzione avviene in cinque fasi:

  1. lettura di inventory e data
  2. connessione ai target
  3. preparazione con rilevamento cambiamenti e ordine operazioni
  4. esecuzione delle modifiche
  5. disconnessione e cleanup

Un punto importante e che pyinfra prepara prima l'ordine delle operazioni e poi le esegue. Questo permette di mantenere l'ordine logico delle operazioni, eseguendo ogni singola operation in parallelo sui target rilevanti.

Inventory

Un inventory pyinfra contiene:

  • host
  • gruppi
  • dati di gruppo
  • dati per singolo host

Esempio minimale:

web_servers = [
    "web-01.example.net",
    "web-02.example.net",
]

db_servers = [
    ("db-01.example.net", {"install_postgres": True}),
]

I dati associati agli host o ai gruppi possono essere usati nel deploy Python tramite `host.data`.

Operations

Le operations descrivono cosa deve essere vero sul sistema target. In molti casi non rappresentano un'azione imperativa ma uno stato desiderato.

Esempio:

from pyinfra.operations import apt, files

apt.packages(
    name="Install vim",
    packages=["vim"],
    update=True,
)

files.file(
    name="Ensure log file exists",
    path="/var/log/app.log",
    user="app",
    group="app",
    mode="644",
)

Se il target e gia nello stato richiesto, pyinfra non applica cambiamenti ulteriori.

Comandi ad-hoc

Pyinfra puo essere usato anche direttamente da CLI senza creare un deploy completo.

Esempi:

pyinfra @local exec -- echo "hello world"
pyinfra my-server.net exec -- uptime
pyinfra @docker/ubuntu:22.04 exec -- uname -a

Esempio base di deploy

Inventory:

my_hosts = [
    ("ubuntu2204", {
        "ssh_port": 2222,
        "ssh_hostname": "localhost",
        "ssh_user": "vagrant",
        "_sudo": True,
    }),
    "my-server.net",
]

Deploy:

from pyinfra.operations import apt

apt.packages(
    name="Ensure vim is installed",
    packages=["vim"],
    update=True,
)

Esecuzione:

pyinfra inventory.py deploy.py

Differenze pratiche rispetto ad Ansible

  • usa Python invece di fare affidamento principalmente su YAML
  • e comodo per chi vuole logica, condizioni e riuso direttamente nel linguaggio
  • mantiene il modello inventory + operazioni + stato desiderato
  • puo essere piu naturale per team che preferiscono automazione programmabile piuttosto che playbook dichiarativi

Quando ha senso usarlo

  • homelab e server Linux
  • provisioning e configurazioni ripetibili
  • deploy gestiti in Git
  • ambienti dove Python e gia parte del flusso operativo

Limiti da tenere presenti

  • richiede maggiore familiarita con Python rispetto a strumenti piu dichiarativi
  • alcuni team preferiscono YAML per leggibilita immediata lato operations
  • va progettato con attenzione quando la logica dipende da fatti che possono cambiare durante il deploy

Installazione

Secondo la documentazione ufficiale, il metodo consigliato e:

uv tool install pyinfra
pyinfra --version

Alternative supportate: `pipx` oppure `pip` in virtual environment.

Link ufficiali