Scripts para Proxmox: crear conjuntos de máquinas virtuales para un grupo de usuarios
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.
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.
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
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.
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
Y vemos que, de forma inmediata, comienza a realizar la tarea prevista…
Cuando termine, volveremos a obtener el prompt de la consola…
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.