Hasta ahora te mostré como ejecutar comandos RACADM para hacer ciertas cosas sobre iDRAC. Pero convengamos que esto solo nos ahorra tener que ingresar a la interfaz gráfica para ejecutar ciertas acciones. Si bien es un gran paso, aún nos falta para lograr la automatización completa y ahí es donde viene a nuestra ayuda Python.
A lo largo de esta entrada voy a mostrarte como ejecutar un comando RACADM, sobre la cantidad de servidores que precises, con la ayuda de un script de Python.
Debo aclarar que no soy programador, solo utilizo Python como herramienta de automatización e intento aprender un poco más día a día. Si ofendo a alguien con mi código le pido disculpas. Y si lo ofendo tanto que le dan ganas de ayudarme a mejorar, bienvenido sea. :)
Contexto
- Ejecuto el script desde una Virtual Machine (VM) con Debian 10 que corre en mi equipo.
- En la VM instalé Python v3.x. Acá hay una receta para instalar Python v3.8 sobre Debian 10. Aunque seguramente el Linux que instalaste ya lo tiene. Verificarlo con el comando: ‘python3 -v’.
- En la VM también instalé RACADM como lo explico en una entrada anterior.
Script bloque a bloque
Bloque 1
En este primer bloque vamos a capturar por teclado los datos necesarios para conectarnos al iDRAC: usuario, contraseña, dirección ipv4 de iDRAC y cantidad de hosts a configurar.
import subprocess # Rutina - Obtener datos para conectarnos al iDRAC: # usuario, contraseña, ipv4, cantidad de hosts a configurar # # Obtener usuario, si se presiona Enter el usuario será 'root' usuario = input('Usuario de iDRAC? [presionar Enter para root]: ') if usuario == '': usuario = 'root' # Obtener contraseña, si se presiona Enter la contraseña será 'calvin' contraseña = input('Contraseña de iDRAC? [presionar Enter para calvin]: ') if contraseña == '': contraseña = 'calvin' # Obtener dirección IPv4 de iDRAC, el dato no puede ser 'null' # no se valida formato, dirección válida ni nada por el estilo while True: ip_idrac = input('Dirección IPv4 de iDRAC del primer host? ') if ip_idrac == '': print('La dirección IP no puede ser null! Por favor ingresar un dato.') continue else: break # Obtener la cantidad de hosts (de iDRACs) que se van a configurar # se supone que las direcciones IP serán consecutivas while True: cant_hosts = int(input('Cuántos hosts vamos a configurar? ')) if cant_hosts == '': print('can not be null!') continue else: hosts = int(cant_hosts) break # Fin de rutina
Bloque 2
En este bloque vamos a identificar la parte de host de la dirección IP que el usuario ingresó en el bloque anterior. Este dato lo vamos a utilizar en el bloque siguiente.
# Rutina - Identificar el último octeto de la dirección IPv4 # al finalizar la variable ultimo_octeto será igual al valor # del último octeto de la dirección IPv4 ingresada # # Parte de host de la dirección IPv4 ultimo_punto = ip_idrac.rfind('.') comienza = ultimo_punto + 1 termina = len(ip_idrac) red = ip_idrac[0:ultimo_punto+1] ultimo_octeto = ip_idrac[comienza:termina] # Fin de rutina
Bloque 3
Esta es la parte principal del script. Ejecutaremos el mismo comando RACADM, indicado en la línea subprocess.call por cada host.
Podemos reutilizar este script con tan solo modificar esa línea de comando RACADM.
# Rutina - Main
#
i = 0
# Por cada uno de los hosts se ejecutará el comando RACADM que está dentro del bucle
while i < hosts:
# Genera la dirección IP de iDRAC haciendo merge de la porción de red + la porción de host
ip_idrac = red + str(ultimo_octeto)
# Ejecuta el comando RACADM
# esta sería la única línea a modificar para poder reutilizar el script
subprocess.call(['racadm', '-r', ip_idrac, '-u', usuario, '-p', contraseña, 'getsysinfo', '--nocertwarn'])
# Incrementamos los contadores
ultimo_octeto = int(ultimo_octeto) + 1
i = int(i) + 1
# Fin de rutina
Listo. Lo único que deberías hacer para probarlo es pegar los bloques en orden dentro de un archivo del tipo getinfo.py y ejecutarlo de este modo.
python3 getinfo.py
Disclaimer: IMPORTANTE utiliza esta información bajo tu responsabilidad, no me hago responsable de los resultados. No aplicar en ambiente productivo (1) sin haberlo probado antes y (2) sin tener copia de seguridad.