Cómo conectar con clúster Proxmox desde Ansible para automatizar tareas de virtualización. Cómo crear usuarios, grupos, API Tokens y cómo Automatizar tareas en Proxmox con Ansible. Configuramos el entorno Ansible para enviar por email el resultado de la ejecución de la tarea.

Preparar entorno Proxmox, usuario, grupo, roles, API Token

La buena práctica, siempre que vayamos a usar un API, es crear un usuario específico para el API, con los permisos estrictamente necesarios. En Proxmox, iremos a «Datacenter» – «Permissions» – «Groups» y pulsaremos en «Create»:

Indicaremos el nombre para el grupo, por ejemplo «ansible»:

En «Permissions», pulsaremos en «Add» y elegiremos «Group Permission»:

Indicaremos «/» para poder tener acceso/visibilidad, de partida, a todos los objetos del clúster Proxmox. Aunque, si queremos afinar los permisos, aquí podemos indicar, por ejemplo /vms, para que solo tenga visibilidad de las máquinas virtuales. Lo importante es elegir el rol apropiado, en «Role», es lo que realmente definirá qué podrá hacer sobre los objetos. En este caso, puesto que usaremos el API para inventariar máquinas, detener, iniciar, realizar snapshots, etc, elegiremos el rol «PVEVMAdmin»:

Una vez elegido el Path, el Group y el Role, marcaremos «Propagate» y pulsaremos «Add»:

Crearemos el usuario para el API, desde «Permissions» – «Users» – «Add»:

Introduciremos los siguientes datos:

  • User name: api_ansible.
  • Realm: Linux PAM standard authentication.
  • Group: Ansible.
  • Enabled: marcado.

Y, una vez creado el usuario y asignado al grupo de permisos, crearemos el API Tokens, desde «Datacenter» – «Permissions» – «API Tokens», pulsaremos en «Add»:

Introduciremos los siguientes datos:

  • User: elegiremos el creado anteriormente «api_ansible@pan».
  • Token ID: ansible.
  • Privilege Separation: importante desmarcar esta opción.
  • Expire: dejaremos en blanco salvo que queramos establecer una fecha de expiración al token.

Copiaremos el secreto (secret) en lugar seguro, lo necesitaremos más adelante para conectar Ansible con Proxmox.

Crear playbook en Ansible/Semaphore y conectar con Proxmox

En el servidor de Ansible, en la carpeta donde tengamos los playbooks (o en Git si los tenemos en repositorio), crearemos un nuevo playbook:

Y le asignaremos este contenido:

Teniendo en cuenta:

  • api_secreto: cambiaremos por el secret obtenido al crear el API Token en Proxmox.
  • proxmox_api_ip: introduciremos la IP de uno de los nodos del clúster Proxmox, si solo tenemos un nodo, la de ese nodo.
  • proxmox_nodos: indicaremos el nombre exacto que aparece en la consola web de Proxmox de cada nodo.
  • api_token_id: introduciremos aquí el nombre exacto que hayamos establecido en el campo Token ID, al crear el API Token.

Desde la gestión web de Ansible, desde Semaphore, crearemos una nueva plantilla, pulsando en «Plantillas de Tareas» y en «Nueva plantilla»:

Indicaremos los siguientes datos para la plantilla/tarea:

  • Nombre: estado_maquinas_virtuales_cluster_proxmox.
  • Ruta al archivo de playbooks: muy importante indicar aquí el nombre exacto del fichero .yml creado con el playbook, es este caso estado_vms_proxmox.yml.
  • Inventario: aunque en este caso NO es necesario establecer ningún inventario, porque todos los datos de los nodos y datos de conexión (API Token) los establecemos en el fichero .yml anterior, Semaphore nos obliga a poner aquí un valor, por lo que elegiremos cualquier inventario que tengamos. Si no tenemos inventario, crearemos uno cualquiera.
  • Repositorio: elegiremos local si el playbook lo hemos creado en el servidor local Ansible.

Pulsaremos en «Crear»:

Realizaremos una primera ejecución de la tarea, pulsando en el botón play:

Si hemos establecido los datos correctamente (grupo, rol, usuario, api token, ip, nombre de nodos, etc.), Ansible conectará con Proxmox directamente, mediante el API, y obtendrá los datos de las máquinas virtuales de cada nodo:

Preparar entorno Ansible/Semaphore para enviar estado de las máquinas virtuales por email cada semana

Desde Semaphore, crearemos un grupo de variables para establecer los datos de conexión al servidor SMTP para el envío del email. En «Grupos de Variables», pulsaremos en «Nuevo grupo»:

Introduciremos los siguientes datos para el grupo de variables:

  • Nombre del Grupo: servidor_email.
  • Variables adicionales: smtp_user, smtp_pass, email_from, email_to, smtp_host, smtp_port.

En el servidor Ansible, crearemos un fichero .yml de playbook:

Con el siguiente contenido:

Volvemos a Semaphore y creamos una nueva plantilla («Plantilla de Tareas» – «Nueva plantilla»), introduciendo los siguientes datos:

  • Nombre: vm_proxmox_email.
  • Ruta al archivo de playbook: vm_proxmox_email.yml.
  • Inventario: aunque en este caso NO necesitamos inventario, porque en el playbook van todos los datos, elegiremos un inventario porque es obligatorio: servidores_proxmox.
  • Repositorio: Local.
  • Grupos de Variables: elegiremos «servidor_email».

Realizaremos una primera prueba de ejecución de la tarea:

Si hemos introducido los datos del servidor de email en las variables y los datos de conexión con el clúster Proxmox, la tarea obtendrá el estado de las máquinas virtuales y enviará el resultado por email:

Recibiremos un email con los datos de las máquinas virtuales de cada nodo:

Para recibir este informe periódicamente, desde Semaphore, pulsaremos en «Horario» – «Nuevo horario»:

Elegiremos «Cron»:

Introduciremos los datos para la programación:

  • Name: enviar_email_maquinas_virtuales_proxmox.
  • Template: vm_proxmox_email.
  • Timing: Weekly.
  • Weekdays: Monday, Thursday.
  • Hours: 14.
  • Minutes: 00.