Come automatizzare il deployment delle VM Proxmox con Pulumi
Fai il deployment di VM Proxmox in pochi minuti con Pulumi e Python
L'automazione dell'infrastruttura è l'elemento chiave per un deployment degli ambienti rapido, efficiente, prevedibile e riproducibile. La maggior parte delle guide su Proxmox e Pulumi in circolazione è desolantemente superficiale: sfoggia buzzword ma ti lascia a metà strada, senza esempi reali né passaggi spiegati uno per uno. Sappiamo che ti serve più della teoria: ti serve una guida che scenda in profondità, mostri i dettagli scomodi e ti dia codice funzionante da usare subito.
Nel nostro articolo precedente su Proxmox abbiamo mostrato come i template di VM Proxmox, uniti a Cloud-Init, accelerino enormemente il workflow di deployment. Quella base è solida, ma c'è un approccio ancora più potente ad aspettarti.
Per ottenere una vera automazione "con un solo comando" ed eliminare il configuration drift manuale, ti serve uno strumento che ti permetta di definire l'infrastruttura come scrivi il codice applicativo. A differenza degli strumenti tradizionali basati su linguaggi proprietari, Pulumi ti consente di definire l'infrastruttura con i linguaggi di programmazione che già conosci: Python, Go, C#, Java e TypeScript. Puoi così sfruttare le competenze che hai già, applicare le best practice dell'ingegneria del software e integrarti senza attriti con le pipeline CI/CD.
In questa guida pratica ti mostriamo esattamente come usare Pulumi con Proxmox: dall'installazione a un esempio Python funzionante che puoi adattare subito. Un percorso concreto che ti darà le conoscenze e la sicurezza per cambiare il modo in cui gestisci l'infrastruttura. Pronto a salire di livello? Cominciamo.
Che cos'è Pulumi?
Pulumi è uno strumento open-source per la gestione dell'infrastruttura cloud. Tra le sue caratteristiche principali:
- usa linguaggi di programmazione universali al posto di un DSL (a differenza di Terraform);
- funziona con le principali piattaforme cloud usate dalle aziende: AWS, Azure, Google Cloud;
- gestione dello stato flessibile: lo stato dell'infrastruttura può restare in locale per lo sviluppo, su S3 per il lavoro in team o in Pulumi Cloud per le funzionalità enterprise;
- piene capacità di programmazione (logica, cicli, condizioni).
Per Proxmox, il provider pulumi-proxmoxve consente di gestire:
- macchine virtuali (VM);
- template;
- dischi;
- interfacce di rete;
- parametri Cloud-init.
Passo 1: installare Pulumi
Pulumi si installa su tutti i sistemi operativi più diffusi:
Installazione su macOS
brew install pulumi/tap/pulumiInstallazione su Windows
Puoi installarlo dal sito ufficiale Pulumi
Installazione su Linux
curl -fsSL https://get.pulumi.com | shDopo l'installazione, Pulumi viene aggiunto a ~/.pulumi/bin.
Se per qualche motivo la variabile PATH non fosse stata aggiornata:
export PATH=$PATH:$HOME/.pulumi/bin
echo 'export PATH=$PATH:$HOME/.pulumi/bin' >> ~/.bashrc
source ~/.bashrcVerifica dell'installazione
pulumi versionSe il comando mostra il numero di versione di Pulumi, l'installazione è completata.
Passo 2: configurare Pulumi per l'integrazione con Proxmox
Per gestire Proxmox, Pulumi ha bisogno dell'accesso via API.
2.1 Abilitare l'accesso API in Proxmox
- Apri la Web UI di Proxmox
- Raggiungi gli API Token: Datacenter → Permissions → API Tokens
- Crea un token, per esempio root@pam
- Imposta "Privilege Separation" su false (per l'accesso completo). Clicca "Add"
- Copia:
- Token ID
- Secret
- Assegna i permessi: Datacenter → Permissions → Add → Api token:
- Path → /
- Api token → Token name
- Role → Administrator
Passo 3: creare un progetto Pulumi
mkdir pulumi-proxmox
cd pulumi-proxmox
pulumi new pythonDopo l'inizializzazione avrai:
Pulumi.yaml
__main__.py
requirements.txtConfigurare il provider:
pip install pulumi-proxmoxvePulumi mette a disposizione una propria configurazione integrata, ed è quella che useremo
pulumi config set proxmox:endpoint https://192.168.0.128:8016/
pulumi config set proxmox:api-name root@pam!pulumi
pulumi config set proxmox:public-key: "ssh-key"
pulumi config set proxmox:api-token "api token" --plaintextPasso 4. Esempio di codice: creare una VM da un template
Ora la parte più interessante: creiamo una VM dal template preparato in precedenza.
Importare il provider
# python
import pulumi
from pulumi_proxmoxve import Provider
from pulumi_proxmoxve.vm import VirtualMachineCaricare la configurazione di Pulumi
# python
config = pulumi.Config("proxmox")
endpoint = config.require("endpoint")
public_key = config.require("public-key")
api_token = config.require_secret("api-token")
api_name = config.require("api-name")Connettersi all'API di Proxmox
# python
provider = proxmoxve.Provider(
"proxmoxve",
endpoint=endpoint,
api_token=f"{api_name}={api_token}",
insecure=True
)Creare la VM dal template
vm = proxmoxve.vm.VirtualMachine(
resource_name="vm-test",
node_name="srv0",
vm_id=9875,
name="pulumi-vm-test",
agent=proxmoxve.vm.VirtualMachineAgentArgs(
enabled=False,
trim=True,
type="virtio"
),
bios="seabios",
memory=proxmoxve.vm.VirtualMachineMemoryArgs(
dedicated=4096
),
cpu=proxmoxve.vm.VirtualMachineCpuArgs(
cores=2,
sockets=1
),
clone=proxmoxve.vm.VirtualMachineCloneArgs(
node_name="srv0",
vm_id=9000,
full=True
),
disks=[
proxmoxve.vm.VirtualMachineDiskArgs(
interface="scsi0",
datastore_id="local-lvm",
size=20,
file_format="qcow2"
)
],
cdrom=proxmoxve.vm.VirtualMachineCdromArgs(
interface="ide2",
file_id="none"
),
network_devices=[
proxmoxve.vm.VirtualMachineNetworkDeviceArgs(
bridge="vmbr0",
model="virtio"
)
],
on_boot=True,
operating_system=proxmoxve.vm.VirtualMachineOperatingSystemArgs(type="other"),
initialization=proxmoxve.vm.VirtualMachineInitializationArgs(
type="nocloud",
datastore_id="local-lvm",
dns=proxmoxve.vm.VirtualMachineInitializationDnsArgs(
domain="example.com",
servers=["1.1.1.1", "8.8.8.8"]
),
ip_configs=[
proxmoxve.vm.VirtualMachineInitializationIpConfigArgs(
ipv4=proxmoxve.vm.VirtualMachineInitializationIpConfigIpv4Args(
address="192.168.0.140/24",
gateway="192.168.0.1"
)
)
],
user_account=proxmoxve.vm.VirtualMachineInitializationUserAccountArgs(
username="user",
password="password123",
keys=[public_key]
)
),
opts=pulumi.ResourceOptions(provider=prov
Passo 5. Esecuzione
Anteprima del piano:
pulumi previewApplicare:
pulumi upPulumi mostrerà quale VM verrà creata e chiederà conferma. Dopo la conferma, la VM comparirà in Proxmox.
Passo 6. Eliminare la VM
Se la VM non serve più:
pulumi destroyChe cosa abbiamo ottenuto?
- Processo di creazione delle VM completamente automatizzato
- Uso dei template + Cloud-Init
- Gestione tramite codice Python
- Possibilità di creare decine di VM con un solo comando
L'approccio scala senza difficoltà: puoi generare VM in un ciclo, creare pool di risorse, collegarle automaticamente alle reti e integrare il tutto nella CI/CD.
Per approfondire ti consigliamo di consultare la documentazione ufficiale di Proxmox e di seguire gli aggiornamenti dei nostri articoli. Offriamo servizi su Azure, Proxmox, template di VM sicuri e hardening della CI/CD.