Scripts para Proxmox: eliminar conjuntos de máquinas virtuales para un grupo de usuarios

Publicado por P. Ruiz en

Hace unos días, te explicábamos cómo Eliminar una cuenta de usuario con su conjunto de máquinas virtuales, mediante un script en Proxmox VE. Este artículo venía a ser la continuación de una serie que venimos publicando últimamente para automatizar algunas actividades en Proxmox VE.

Si aún no has leído esos artículos previos, te recomiendo que comiences por ellos. Son los siguientes:

El artículo anterior nos alivia considerablemente la tarea de eliminar por completo una cuenta y todo su escenario de prácticas asociado, pero si tienes que eliminar todo un grupo de usuarios, por ejemplo los alumnos de una clase, la tarea sigue siendo bastante pesada.

De tosas formas, si te paras a pensar, podemos utilizar la misma estrategia que usamos para crear grupos de usuarios (el último artículo de la lista anterior), pero ahora para eliminarlos.

De hecho, podemos usar el mismo archivo de datos, con los nombres de las cuentas de usuario, que usábamos allí. Sin embargo, nada nos impide crear un archivo nuevo con las cuentas a eliminar, cuando no necesitemos eliminar la totalidad de un grupo.

La idea es crear un script que lea, uno a uno, la lista de usuarios y ejecute el script que ya hicimos, para eliminar su configuración individual (el que hemos mencionado al principio del artículo).

Una vez fijado nuestro objetivo, comencemos…

Por cierto, si has llegado hasta este artículo, pero aún no tienes instalado y configurado Proxmox VE puedes encontrar ayuda en los artículos que ya tenemos publicados en SomeBooks.es sobre este tema.

Contenido del script que elimina cada cuenta y con sus conjuntos de trabajo

En este caso, el script se llamará quitargrupo.sh y, como puedes imaginar, necesitará recibir como argumento el nombre del archivo con la lista de cuentas que vamos a eliminar.

Por lo tanto, el script comenzará comprobando que, efectivamente, recibe el argumento. Si no fuese así, mostraría un mensaje informativo y terminaría la ejecución. Será algo como esto:

if [ $# -ne 1 ]; then
  echo "Sintáxis: $0 listadoDeAlumnos.txt"
  echo "'listadoDeAlumnos.txt' es un archivo de texto"
  echo "Cada línea tendrá IdAlumno"
  exit
fi

Si el numero de argumentos es correcto, y por lo tanto no se ejecuta el contenido de la orden if, estaremos listos para comenzar a procesar las cuentas de usuario.

Actuaremos de un modo parecido a los artículos anteriores, leyendo el archivo con las cuentas de usuario, linea a línea.

Por cada línea que procesemos, llamaremos al script quitarusuario.sh, enviándole el nombre de la cuenta que hayamos leído para eliminarla, junto con su laboratorio de prácticas. En definitiva, algo como esto:

while read -r usuario
do
  ./quitarusuario.sh $usuario
done < "datos/$1"

De este modo, aprovechamos el trabajo que ya teníamos hecho, y simplificamos nuestra tarea de hoy.

En definitiva, el script completo nos quedaría como sigue, teniendo en cuenta que he añadido comentarios para identificar cada parte y un par de comandos echo para que el script vaya informando de dónde se encuentra en cada momento:

#!/bin/bash

#Sinataxis
if [ $# -ne 1 ]; then
  echo "Sintáxis: $0 listadoDeAlumnos.txt"
  echo "'listadoDeAlumnos.txt' es un archivo de texto"
  echo "Cada línea tendrá IdAlumno"
  exit
fi

#Utiliza el script limpiar.sh para eliminar una cuenta de usuario,
#el conjunto con su nombre y las máquinas virtuales asociadas
#a dicho conjunto
while read -r usuario
do
  echo "Borrando cuenta $usuario"
  echo "-------------------------------------------------"
  ./quitarusuario.sh $usuario
done < "datos/$1"

Crear el archivo del script

Como en ocasiones anteriores, usaremos el editor nano para crear el archivo:

nano /scripts/quitargrupo.sh

Y, cuando nos encontremos en su área de trabajo, copiaremos en su interior el contenido del listado anterior.

Una vez completada la tarea, volvemos a pulsar la combinación de teclas Ctrl + X para salir, y nos aseguramos de guardar los cambios.

Scripts-para-Proxmox-eliminar-grupos-de-usuarios-y-sus-máquinas-virtuales-001

Por último, no debemos olvidar cambiar los permisos del archivo que acabamos de crear, para que sea posible ejecutarlo. Lo conseguimos con la siguiente orden:

chmod 0700 /scripts/quitargrupo.sh

Solo tenemos que escribir la orden en la terminal, y pulsar la tecla Intro.

Scripts-para-Proxmox-eliminar-grupos-de-usuarios-y-sus-máquinas-virtuales-002

Comprobar el resultado final

Para comprobar que todo funciona como debe, comenzaremos situándonos en la ruta donde guardamos el script (en mi caso, la carpeta /scripts). Después, ejecutamos el script sin argumentos:

./quitargrupo.sh

De este modo nos asegurarnos de que muestra la pequeña ayuda que incluimos al principio.

Como esperábamos, nos ofrece información sobre su funcionamiento, y no hace nada más.

Scripts-para-Proxmox-eliminar-grupos-de-usuarios-y-sus-máquinas-virtuales-003

Después, pasamos a ejecutarlo con el argumento. Usaremos el nombre del archivo que utilizamos en el artículo Scripts para Proxmox: crear conjuntos de máquinas virtuales para un grupo de usuarios. Así comprobaremos que los conjuntos que creamos de forma automática entonces, también se eliminan de forma automática ahora.

Quedará así:

./quitargrupo.sh alumnos.txt

Escribimos la orden y pulsamos la tecla Intro.

Scripts-para-Proxmox-eliminar-grupos-de-usuarios-y-sus-máquinas-virtuales-004

Comprobaremos que, de forma inmediata, comienza a realizar la tarea prevista…

Solo tenemos que esperar el tiempo necesario

Scripts-para-Proxmox-eliminar-grupos-de-usuarios-y-sus-máquinas-virtuales-005

Cuando termine, volveremos a obtener el prompt de la consola…

Y comprobaremos que han desaparecido las máquinas y los conjuntos en el panel izquierdo.

Scripts-para-Proxmox-eliminar-grupos-de-usuarios-y-sus-máquinas-virtuales-006

Como es posible que hayas creado diferentes grupos, con diversos escenarios de prácticas, este método te permitirá eliminar cómodamente sólo aquellos que ya no vayan a ser utilizados. Incluso, como dijimos antes, puedes crear un archivo de texto para eliminar las cuentas y conjuntos solo de una parte de un grupo (imagina, por ejemplo, aquellos que hayan superado la actividad, o aquellos que hayan abandonado).

Como puedes imaginar, esto puede ahorrarte una cantidad de trabajo importante en tu día a día, cuando administras un servidor Proxmox VE que sea utilizando en un ambiente académico… Y no te preocupes, en futuros artículos iremos completando esta idea con nuevas funcionalidades, pero para el artículo de hoy, creo que ya es suficiente.

Espero que te haya resultado útil.