Minientrada

Creación de un sencillo y práctico HTTP Server en Python

Cuando lo único que necesitas es sencillamente transferir archivos a otro equipo dentro de la red local, entonces podrías levantar este sencillo web server en unos pocos segundos, descargar del otro lado y listo.

Sin necesidad de configurar ni instalar nada extraño con este sencillo y práctico HTTP Server en Python.

Contenido
1. Requerimientos
2. Código
3. Ejecución
4. Prueba
5. Link de referencia

1. Requerimientos

Para poder ejecutar esta guía en tu equipo, ya sea Windows o Linux, simplemente se requiere tener instalado Python 3.

2. Código

Creamos un archivo de texto que se llame por ejemplo pyserver.py y agregamos las líneas de código que indico a continuación.

import os
from http.server import HTTPServer, CGIHTTPRequestHandler

# Si lo ejecutas en Windows
# Directorio que se publicará: C:\Temp
# puede ser el que más te guste
os.chdir('c:\\Temp\\')
# Si lo ejecutas en Linux
# os.chdir('/tmp')

# Dirección desde donde se publicará el servicio: '' = localhost
# y puerto en el que escuchará: 80
server_object = HTTPServer(server_address=('', 80), RequestHandlerClass=CGIHTTPRequestHandler)

server_object.serve_forever()

3. Ejecución

Para ejecutarlo tenemos que ir a la línea de comando y ejecutar.

python pyserver.py

4. Prueba

Para probarlo abrimos un navegador web y apuntamos a localhost.

5. Link de referencia

3 Lines of Python Code to Write A Web Server

Disclaimer: por favor utilizar este material bajo tu responsabilidad. No aplicar en ambientes productivos sin haberlo probado antes y asegurate de tener siempre una copia de seguridad.

Anuncio publicitario
Minientrada

Automatización de RACADM con Python

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.