Skip to main content

Usar el API de Proxmox VE

Vamos a poner algún ejemplo del uso del API de Proxmox VE

Para ello debemos de tener nuestro cookie temporal y el token de crsf

Ejemplo 1: Crear un contenedor LXC mediante al API de Proxmox

curl -s -D/dev/stderr -k \
    -H "$(<header)" -b "$(<cookie)" \
    -XPOST \
    -d hostname=test.tecnocratica.net \
    -d password=12345 \
    -d rootfs=localThin:4 \
    -d ostemplate=iso-templates:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \
    -d vmid=602 \
    -d 'net0=name%3Deth0,bridge%3Dvmbr0' \
    "https://grupo10.tecnocratica.net:8006/api2/json/nodes/hv302/lxc"

Como vemos, hay múltiples acciones que podemos ejecutar en el API de Proxmox VE

En la documentación, podemos ver los diferente métodos para usar el API de Proxmox VE

https://pve.proxmox.com/pve-docs/api-viewer/index.html

Captura de pantalla 2024-01-28 a las 12.13.39.png

Navegando por cada una de las opciones, podemos ver los PUT, GET, etc de cada una.

Siguiendo el ejemplo anterior, vemos el método GET, que nos devuelve valores de una determinada máquina

Captura de pantalla 2024-01-28 a las 12.16.24.png

Para crearla, usamos el método POST, en la ruta que hemos mostrado antes del cual que crea la máquina, podemos ver los parámetros que soporta. En la imagen se muestra parte de ellos.

Captura de pantalla 2024-01-28 a las 12.17.26.png


Como vemos, mediante el API de Proxmox, podemos gestionar toda nuestra infraestructura y automatizarla (que es como lo hacemos en Tecnocrática) ya que de otra forma sería muy difícil gestionar miles de máquinas sin la ayuda del API para la orquestación, provisión y mantenimiento.

Ejemplo 2 Crear una máquina qemu

Vamos a ver como crear por ejemplo una máquina qemu, vamos a definir los parámetros de la máquina

data_VM = {
"name" : "testvideo",
"node" : "hv9",
"vmid" : 5121,
"sockets": 1,
"cores": 2,
"cpu": "host",
"ostype": "l26",
"scsihw":"virtio-scsi-pci",
"ide2": "local:iso/debian-12.0.0-amd64-netinst.iso,media=cdrom",
"virtio0": "loca-lvm:10",
"memory": 2048,
"net0": "virtio,bridge=vmbr0"
}

A continuación vamos a ver cada uno que es lo que significa:

name: Nombre de la máquina

node: El nodo en el que vamos a crear la máquina en nuestro cluster

vmid: El id único de la máquina

sockets: EL número de sockets de la máquina virtual

cores: El número de cores de la máquina virtual

cpu: El tipo de cpu

ostype: Tipo de sistema operativo en nuestro caso l26, los valores pueden ser:(other | wxp | w2k | w2k3 | w2k8 | wvista | win7 | win8 | win10 | win11 | l24 | l26 | solaris)

scsihw: Controladora de disco (lsi | lsi53c810 | virtio-scsi-pci | virtio-scsi-single | megasas | pvscsi)

ide2: Disco IDE para el CD-ROM

virtio0: en este caso vamos a crear un disco virtio de 10 G

memory: Memoria de la máquina

net: Interfaz 0 de la red de la máquina controladora, bridge y en su caso vlan

curl -vvv -k -s  -X POST -H "Authorization: PVEAPIToken=APITOKEN=TOKENCODE" -H "Content-Type: application/json" \
-d '{"name" : "testvideo", "node" : "<node>", "vmid" : 5121,"sockets": 1, "cores": 2, "cpu": "host","ostype": "l26","ide2": "local:iso/debian-12.0.0-amd64-netinst.iso,media=cdrom","scsihw":"virtio-scsi-pci","scsi0": "local-lvm:10,cache=writeback","memory": 2048,"net0": "virtio,bridge=vmbr0"}' \
  "https://<host>:8006/api2/json/nodes/<node>/qemu"