122 lines
4.2 KiB
Python
122 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import FileSystemLib
|
|
import DiskLib
|
|
|
|
os.environ["DEBUG"] = "no"
|
|
|
|
# Obtener el número de serie y configuración inicial
|
|
ser = subprocess.getoutput("ogGetSerialNumber")
|
|
cfg = ""
|
|
|
|
# Obtener el número de discos
|
|
disks = len(subprocess.getoutput("ogDiskToDev").split())
|
|
|
|
|
|
for dsk in disk_list:
|
|
# Número de particiones
|
|
particiones = FileSystemLib.ogGetPartitionsNumber(dsk) or "0"
|
|
particiones = int(particiones)
|
|
|
|
# Tipo de tabla de particiones
|
|
ptt = DiskLib.ogGetPartitionTableType(dsk)
|
|
ptt_mapping = {"MSDOS": 1, "GPT": 2, "LVM": 3, "ZPOOL": 4}
|
|
ptt = ptt_mapping.get(ptt, 0)
|
|
|
|
# Información de disco (partición 0)
|
|
disk_size = DiskLib.ogGetDiskSize(dsk)
|
|
cfg += f"{dsk}:0:{ptt}:::{disk_size}:0;"
|
|
|
|
# Recorrer particiones
|
|
for par in range(1, particiones + 1):
|
|
# Código del identificador de tipo de partición
|
|
cod = DiskLib.ogGetPartitionId(dsk, par)
|
|
|
|
# Tipo del sistema de ficheros
|
|
fsi = FileSystemLib.getFsType(dsk, par) or "EMPTY"
|
|
|
|
# Tamaño de la partición
|
|
tam = DiskLib.ogGetPartitionSize(dsk, par) or "0"
|
|
|
|
# Sistema operativo instalado
|
|
soi = ""
|
|
uso = 0
|
|
if fsi not in ["", "EMPTY", "LINUX-SWAP", "LINUX-LVM", "ZVOL"]:
|
|
mount_point = DiskLib.ogMount(dsk, par)
|
|
if mount_point:
|
|
# Obtener la versión del sistema operativo instalado
|
|
try:
|
|
# Asumiendo que getOsVersion es una función disponible
|
|
import OsLib # Debes tener OsLib.py disponible con la función getOsVersion
|
|
soi_output = OsLib.getOsVersion(dsk, par)
|
|
except ImportError:
|
|
# Si no está disponible, usar subprocess como alternativa
|
|
soi_output = subprocess.getoutput(f"getOsVersion {dsk} {par} 2>/dev/null")
|
|
|
|
soi = soi_output.split(':')[1] if ':' in soi_output else ''
|
|
# Hacer un segundo intento para algunos casos especiales
|
|
if not soi:
|
|
soi_output = subprocess.getoutput(f"getOsVersion {dsk} {par} 2>/dev/null")
|
|
soi = soi_output.split(':')[1] if ':' in soi_output else ''
|
|
|
|
# Sistema de archivos para datos (sistema operativo "DATA")
|
|
if not soi and fsi not in ["EMPTY", "CACHE"]:
|
|
soi = "DATA"
|
|
|
|
# Obtener porcentaje de uso
|
|
mount_point = DiskLib.ogGetMountPoint(dsk, par)
|
|
df_output = subprocess.getoutput(f"df {mount_point}")
|
|
lines = df_output.splitlines()
|
|
if len(lines) >= 2:
|
|
uso_str = lines[1].split()[4] # Esta debería ser la quinta columna
|
|
if uso_str.endswith('%'):
|
|
uso = int(uso_str.rstrip('%'))
|
|
else:
|
|
uso = int(uso_str)
|
|
else:
|
|
uso = 0
|
|
else:
|
|
soi = ""
|
|
uso = 0
|
|
else:
|
|
soi = ""
|
|
uso = 0
|
|
|
|
cfg += f"{dsk}:{par}:{cod}:{fsi}:{soi}:{tam}:{uso};"
|
|
|
|
# Configuración por defecto para cliente sin disco
|
|
if not cfg:
|
|
cfg = "1:0:0:::0;"
|
|
|
|
# Guardar salida en fichero temporal
|
|
cfgfile = "/tmp/getconfig"
|
|
with open(cfgfile, 'w') as f:
|
|
f.write(f"{ser + ';' if ser else ''}{cfg}")
|
|
|
|
# Crear el menú por defecto desde el archivo generado
|
|
subprocess.run(["generateMenuDefault"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
|
|
# Componer salida formateada
|
|
formatted_output = []
|
|
with open(cfgfile, 'r') as f:
|
|
content = f.read().strip().split(";")
|
|
for item in content:
|
|
fields = item.split(":")
|
|
if len(fields) == 1:
|
|
formatted_output.append(f"ser={fields[0]}")
|
|
else:
|
|
formatted_output.append(
|
|
f"disk={fields[0]}\tpar={fields[1]}\tcpt={fields[2]}\tfsi={fields[3]}\tsoi={fields[4]}\ttam={fields[5]}\tuso={fields[6]}"
|
|
)
|
|
|
|
# Mostrar la salida formateada
|
|
print("\n".join(formatted_output))
|
|
|
|
# Borrar marcas de arranque de Windows
|
|
subprocess.run(["rm", "-f", "/mnt/*/ogboot.*", "/mnt/*/*/ogboot.*"])
|
|
|
|
# Volver a registrar los errores
|
|
os.environ.pop("DEBUG", None)
|