From 5d0f041759c9dd560a73b9a7153ffa4d55f4e6b6 Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Wed, 19 Mar 2025 13:16:07 +0100 Subject: [PATCH] refs #1729 add interfaceAdm/getConfiguration.py --- ogclient/interfaceAdm/getConfiguration.py | 166 +++++++++++++--------- 1 file changed, 96 insertions(+), 70 deletions(-) diff --git a/ogclient/interfaceAdm/getConfiguration.py b/ogclient/interfaceAdm/getConfiguration.py index 89a1b0a..786fc84 100755 --- a/ogclient/interfaceAdm/getConfiguration.py +++ b/ogclient/interfaceAdm/getConfiguration.py @@ -1,80 +1,106 @@ -#!/usr/bin/env python3 +#!/usr/bin/python3 + +#_______________________________________________________________________________________________________________________________ +# +# Formato de salida: +# disk=Número de disco\tpar=Número de particion\tcod=Código de partición\tsfi=Sistema de ficheros\tsoi=Sistema instalado\ttam=Tamaño de la partición\n +#_______________________________________________________________________________________________________________________________ + import os +import glob import subprocess -def run_command(command): - result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - return result.stdout.decode().strip() +from InventoryLib import ogGetSerialNumber, ogGetOsVersion +from DiskLib import ogDiskToDev, ogGetPartitionsNumber, ogGetPartitionTableType, ogGetDiskSize, ogGetPartitionId, ogGetPartitionSize +from FileSystemLib import ogMount, ogGetMountPoint, ogGetFsType -def main(): - # No registrar los errores. - os.environ["DEBUG"] = "no" +# No registrar los errores. +#os.environ['DEBUG'] = 'no' - ser = run_command("ogGetSerialNumber") - cfg = "" - disks = int(run_command("ogDiskToDev | wc -w")) +ser = ogGetSerialNumber() +cfg = '' +disks = len (ogDiskToDev()) - for dsk in range(1, disks + 1): - particiones = run_command(f"ogGetPartitionsNumber {dsk}") - particiones = int(particiones) if particiones else 0 - ptt = run_command(f"ogGetPartitionTableType {dsk}") - - ptt_map = { - "MSDOS": 1, - "GPT": 2, - "LVM": 3, - "ZPOOL": 4 - } - ptt = ptt_map.get(ptt, 0) - - cfg += f"{dsk}:0:{ptt}:::{run_command(f'ogGetDiskSize {dsk}')}:0;" - - for par in range(1, particiones + 1): - cod = run_command(f"ogGetPartitionId {dsk} {par} 2>/dev/null") - fsi = run_command(f"getFsType {dsk} {par} 2>/dev/null") or "EMPTY" - tam = run_command(f"ogGetPartitionSize {dsk} {par} 2>/dev/null") or "0" - soi = "" - uso = 0 - - if fsi not in ["", "EMPTY", "LINUX-SWAP", "LINUX-LVM", "ZVOL"]: - if run_command(f"ogMount {dsk} {par} 2>/dev/null"): - soi = run_command(f"getOsVersion {dsk} {par} 2>/dev/null").split(":")[1] - if not soi: - soi = run_command(f"getOsVersion {dsk} {par} 2>/dev/null").split(":")[1] - if not soi and fsi not in ["EMPTY", "CACHE"]: - soi = "DATA" - uso = int(run_command(f"df $(ogGetMountPoint {dsk} {par}) | awk '{{getline; printf \"%d\",$5}}'") or 0) - else: - soi = "" - uso = 0 - - cfg += f"{dsk}:{par}:{cod}:{fsi}:{soi}:{tam}:{uso};" - - if not cfg: - cfg = "1:0:0:::0;" - - cfgfile = "/tmp/getconfig" - with open(cfgfile, "w") as f: - f.write(f"{ser + ';' if ser else ''}{cfg}") - - run_command("generateMenuDefault &>/dev/null") - - with open(cfgfile, "r") as f: - data = f.read() - - lines = data.split(";") - for line in lines: - if line: - parts = line.split(":") - if len(parts) == 1: - print(f"ser={parts[0]}") +for dsk in range (1, disks+1): + particiones = ogGetPartitionsNumber (dsk) + particiones = int (particiones) if particiones else 0 + # Tipo de tabla de particiones: 1=MSDOS, 2=GPT + ptt = ogGetPartitionTableType (dsk) + ptt_map = { + 'MSDOS': 1, + 'GPT': 2, + 'LVM': 3, + 'ZPOOL': 4, + } + ptt = ptt_map.get (ptt, 0) + # Información de disco (partición 0) + s = ogGetDiskSize (dsk) + cfg += f'{dsk}:0:{ptt}:::{s}:0;' + for par in range (1, particiones+1): + # Código del identificador de tipo de partición + cod = ogGetPartitionId (dsk, par) + # Tipo del sistema de ficheros + fsi = ogGetFsType (dsk, par) + if not fsi: fsi = 'EMPTY' + # Tamaño de la particón + tam = ogGetPartitionSize (dsk, par) + if not tam: tam = '0' + # Sistema operativo instalado + soi = '' + uso = '0' + if fsi not in ['', 'EMPTY', 'LINUX-SWAP', 'LINUX-LVM', 'ZVOL']: + if ogMount (dsk, par): + soi = ogGetOsVersion (dsk, par) + # Hacer un 2º intento para algunos casos especiales. + if not soi: + soi = ogGetOsVersion (dsk, par) + if not soi: soi = '' + if soi: soi = soi.split (':')[1] + # Sistema de archivos para datos (sistema operativo "DATA") + if not soi and fsi not in ['EMPTY', 'CACHE']: + soi = 'DATA' + # Obtener porcentaje de uso. + mntpt = ogGetMountPoint (dsk, par) + uso = subprocess.run (['df', mntpt], capture_output=True, text=True).stdout.splitlines()[-1].split()[4].replace ('%', '') + if not uso: uso = '0' else: - print(f"disk={parts[0]}\tpar={parts[1]}\tcpt={parts[2]}\tfsi={parts[3]}\tsoi={parts[4]}\ttam={parts[5]}\tuso={parts[6]}") + soi = '' + uso = '0' - run_command("rm -f /mnt/*/ogboot.* /mnt/*/*/ogboot.*") + cfg += f'{dsk}:{par}:{cod}:{fsi}:{soi}:{tam}:{uso};' - # Volver a registrar los errores. - os.environ.pop("DEBUG", None) +# Crear 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: + if ser: f.write (f'{ser};\n') + f.write (cfg + '\n') + +# Crear el menú por defecto a partir del fichero generado (no dar ninguna salida). +#subprocess.run ([f'{ogGlobals.OGSCRIPTS}/generateMenuDefault']) + +# Componer salida formateada. +awk_script = r'''{ n=split($0,sep,";"); + for (i=1; i