From 21770526e5a75519b95001afb67dabe013fa8477 Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Fri, 21 Mar 2025 13:59:17 +0100 Subject: [PATCH 1/3] refs #1735 collect firmware type --- ogclient/interfaceAdm/getConfiguration.py | 140 +++++++++------------- 1 file changed, 56 insertions(+), 84 deletions(-) diff --git a/ogclient/interfaceAdm/getConfiguration.py b/ogclient/interfaceAdm/getConfiguration.py index b51d2e9..960fe7a 100755 --- a/ogclient/interfaceAdm/getConfiguration.py +++ b/ogclient/interfaceAdm/getConfiguration.py @@ -1,105 +1,77 @@ #!/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 -from InventoryLib import ogGetSerialNumber, ogGetOsVersion +from InventoryLib import ogGetSerialNumber, ogGetOsVersion, ogIsEfiActive from DiskLib import ogDiskToDev, ogGetPartitionsNumber, ogGetPartitionTableType, ogGetDiskSize, ogGetPartitionId, ogGetPartitionSize from FileSystemLib import ogMount, ogGetMountPoint, ogGetFsType -# No registrar los errores. -#os.environ['DEBUG'] = 'no' - ser = ogGetSerialNumber() -cfg = '' +fwt = 'UEFI' if ogIsEfiActive() else 'BIOS' +print (f'ser={ser}\nfwt={fwt}') + disks = len (ogDiskToDev()) +if disks: + for dsk in range (1, disks+1): + # 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) -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: + # Información de disco (partición 0) + s = ogGetDiskSize (dsk) + print (f'disk={dsk}\tpar=0\tcpt={ptt}\tfsi=\tsoi=\ttam={s}\tuso=0') + + particiones = ogGetPartitionsNumber (dsk) + particiones = int (particiones) if particiones else 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 y porcentaje de uso + soi = '' + uso = '0' + if fsi not in ['', 'EMPTY', 'LINUX-SWAP', 'LINUX-LVM', 'ZVOL']: + if ogMount (dsk, par): 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: - soi = '' - uso = '0' + # 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' + 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: + soi = '' + uso = '0' - cfg += f'{dsk}:{par}:{cod}:{fsi}:{soi}:{tam}:{uso};' - -# 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') + print (f'disk={dsk}\tpar={par}\tcpt={cod}\tfsi={fsi}\tsoi={soi}\ttam={tam}\tuso={uso}') +else: + print ('disk=1\tpar=0\tcpt=0\tfsi=\tsoi=\ttam=0\tuso=0') # Crear el menú por defecto a partir del fichero generado (no dar ninguna salida). +# requiere /tmp/getconfig pero este script ya no lo crea #subprocess.run ([f'{ogGlobals.OGSCRIPTS}/generateMenuDefault']) -# Componer salida formateada. -awk_script = r'''{ n=split($0,sep,";"); - for (i=1; i Date: Fri, 21 Mar 2025 14:12:42 +0100 Subject: [PATCH 2/3] refs #1744 automatically figure PTT out --- CHANGELOG.md | 11 +++++++++++ ogclient/interfaceAdm/Configurar.py | 10 ++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5796462..51c57e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- getConfiguration.py now collects the firmware type + ## [0.1.1] - 2025-03-19 ### Added diff --git a/ogclient/interfaceAdm/Configurar.py b/ogclient/interfaceAdm/Configurar.py index d355c49..a203c29 100755 --- a/ogclient/interfaceAdm/Configurar.py +++ b/ogclient/interfaceAdm/Configurar.py @@ -9,6 +9,7 @@ import SystemLib import CacheLib import FileSystemLib import DiskLib +import InventoryLib #Load engine configurator from engine.cfg file. #Carga el configurador del engine desde el fichero engine.cfg @@ -61,22 +62,20 @@ sparam = tbprm[1] # Partitioning and formatting parameters # Toma valores de disco y caché, separados por "*". # Los valores están en las variables $dis: disco, $che: existe cache (1, 0), $tch: Tamaño de la cache. tbprm = pparam.split ('*') -dis = ptt = tch = None +dis = tch = None for item in tbprm: if '=' not in item: continue k, v = item.split ('=', 1) - if k not in ['dis', 'tch', 'ptt']: ## 'ptt' added, unused 'che' removed + if k not in ['dis', 'tch']: print (f'ignoring unknown disk parameter ({k})') continue if 'dis' == k: dis = int (v) - elif 'ptt' == k: ptt = v elif 'tch' == k: tch = v # Error si no se define el parámetro de disco (dis). if dis is None: sys.exit (ogGlobals.OG_ERR_FORMAT) -if ptt is None: ptt = 'MSDOS' if tch is None: tch = '0' # Toma valores de distribución de particiones, separados por "%". @@ -138,11 +137,10 @@ CacheLib.ogUnmountCache() # Elimina la tabla de particiones cur_ptt = DiskLib.ogGetPartitionTableType (dis) +ptt = 'GPT' if InventoryLib.ogIsEfiActive() else 'MSDOS' if not cur_ptt or ptt != cur_ptt: DiskLib.ogDeletePartitionTable (dis) SystemLib.ogExecAndLog ('command', DiskLib.ogUpdatePartitionTable) - - # Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT). DiskLib.ogCreatePartitionTable (dis, ptt) # Inicia la cache. -- 2.40.1 From b39b8d9a03a9258d774227048a2590ae6358378a Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Fri, 21 Mar 2025 14:14:55 +0100 Subject: [PATCH 3/3] refs #1744 automatically figure PTT out --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51c57e1..f80176c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - getConfiguration.py now collects the firmware type +- Configurar.py now creates partition tables of the right type (MSDOS/GPT) for each machine ## [0.1.1] - 2025-03-19 -- 2.40.1