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

Publicado por P. Ruiz en

Ya hemos dedicado un par de artículos a la elaboración de un script que nos permita crear un usuario y adjudicarle una serie de máquinas virtuales. El objetivo consistía en generar un laboratorio de prácticas para un alumno.

Te recomiendo leer los artículos Crear usuario con un conjunto de máquinas virtuales (parte 1 y parte 2) antes de continuar, porque partiremos de los resultados obtenidos allí, para realizar nuestra tarea de hoy

Si tienes una necesidad parecida a la mía, habrás comprobado que la tarea se ha aliviado bastante, pero aún tienes que crear el escenario de prácticas para cada alumno de forma individual… Lo que sigue siendo bastante pesado.

Eso es lo que vamos a tratar de resolver hoy.

Si te paras a pensar, podemos repetir la misma idea de los artículos anteriores, pero aplicada a los usuarios. Es decir, podríamos crear un archivo de datos, en formato de texto plano, con la lista de usuarios que queremos crear. A continuación, solo tendríamos que crear un nuevo script que lea, uno a uno, la lista de usuarios y ejecute el script que ya hicimos, para crear su configuración individual.

Crear el archivo con la lista de usuarios

Como hemos dicho más arriba, la lista de usuarios estará contenida en un archivo de texto. En cada línea incluiremos únicamente el nombre de una cuenta de usuario, y tendrá tantas líneas como usuarios necesitemos (por ejemplo,tantas líneas como alumnos en una clase. Algo como esto:

pru-alu01
pru-alu02
pru-alu03

Te recomiendo que el nombre de la cuenta sea representativo de la persona a la que representa. Esto te facilitará enormemente la tarea en el futuro.

En definitiva, es algo parecido a lo que hicimos con el archivo maquinas.txt del artículo  Crear usuario con un conjunto de máquinas virtuales (parte 1).

Para nuestro ejemplo el archivo se va a llamar alumnos.txt y lo guardaremos dentro del subdirectorio datos, que ya creamos en los artículos anteriores. Como de costumbre, usaremos el editor nano para crear el archivo:

nano /scripts/datos/alumnos.txt

Una vez que  nos encontramos en el área de trabajo del editor, escribimos el nombre de tantas cuentas de usuario como necesitemos.

Cuando acabemos, pulsamos las teclas Ctrl + X para cerrar el editor, pero asegurándonos de guardar los cambios.

Scripts-para-Proxmox-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-001

Escribir el script que genere los conjuntos de trabajo para cada cuenta

Una vez creado el archivo anterior, estamos listos para comenzar a trabajar en el script. Lo llamaremos nuevogrupo.sh y, como puedes imaginar, necesitará recibir estos tres argumentos:

  • El nombre del servidor donde vamos a crear las cuentas de usuario, los conjuntos y las máquinas virtuales.

  • El nombre del archivo con la lista de cuentas.

  • El nombre del archivo con la lista de máquinas que vamos a crear para cada cuenta de usuario. Este es el mismo archivo que usábamos en los artículos anteriores.

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

if [ $# -ne 3 ]; then
  echo "Sintáxis: $0 nodo listadoDeAlumnos.txt listaDeMáquinas.txt"
  echo "'listaDeMáquinas.txt' es un archivo de texto"
  echo "Cada línea tendrá IdPlantilla,NombreMáquina"
  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 nuevousuario.sh con los argumentos necesarios para crear su laboratorio de prácticas. En definitiva, algo como esto:

while read -r usuario
do
  echo -ne "Creando cuenta:"
  sh nuevousuario.sh $1 $usuario $3
done < "datos/$2"

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 que identifican cada parte:

#!/bin/bash

#Sinataxis
if [ $# -ne 3 ]; then
  echo "Sintáxis: $0 nodo listadoDeAlumnos.txt listaDeMáquinas.txt"
  echo "'listaDeMáquinas.txt' es un archivo de texto"
  echo "Cada línea tendrá IdPlantilla,NombreMáquina"
  echo "'listadoDeAlumnos.txt' es un archivo de texto"
  echo "Cada línea tendrá IdAlumno"
  exit
fi

#Utiliza el script nuevoalumno.sh para crear una nueva cuenta de usuario,
#un nuevo conjunto con su nombre y un grupo de máquinas virtuales asociadas
#a dicho conjunto
while read -r usuario
do
  echo -ne "Creando cuenta:"
  sh usuarionuevo.sh $1 $usuario $3
done < "datos/$2"

Como antes, usaremos el editor nano para crear el archivo:

nano /scripts/nuevogrupo.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-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-002

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/nuevogrupo.sh

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

Scripts-para-Proxmox-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-003

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:

./nuevogrupo.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-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-004

Después, pasamos a ejecutarlo con argumentos. Incluimos el nombre del servidor, el nombre del archivo con las cuentas y el nombre del archivo con las máquinas que deben crearse para cada cuenta:

./nuevogrupo.sh somebooks01 alumnos.txt maquinas.txt

Escribimos la orden y pulsamos la tecla Intro.

Scripts-para-Proxmox-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-005

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

Solo tenemos que esperar el tiempo necesario

Scripts-para-Proxmox-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-006

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

Y comprobaremos que ya aparecen las nuevas máquinas y los nuevos conjuntos en el panel izquierdo.

Scripts-para-Proxmox-crear-conjuntos-de-máquinas-virtuales-para-un-grupo-de-usuarios-007

Por supuesto, puedes tener tantos archivos de cuentas como grupos de alumnos, y tantos archivos de máquinas virtuales, como escenarios diferentes necesites para las actividades prácticas que les propongas. Seguro que comienzas a hacerte una idea de la cantidad de trabajo que puedes ahorrar con este sistema…

Y hasta aquí el contenido del artículo. Espero que te haya resultado útil.