refs #1729 add interfaceAdm/getConfiguration.py
parent
a5a0b2bdb7
commit
5d0f041759
|
@ -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<n; i++){
|
||||
c=split (sep[i],dua,":");
|
||||
if (i==1 && c==1)
|
||||
printf ("ser=%s\n", dua[1]);
|
||||
else
|
||||
printf ("disk=%s\tpar=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\tuso=%s\n",
|
||||
dua[1],dua[2],dua[3],dua[4],dua[5],dua[6],dua[7]);
|
||||
}
|
||||
}
|
||||
'''
|
||||
print (f'nati awk_script ({awk_script})')
|
||||
subprocess.run (['awk', awk_script, cfgfile])
|
||||
|
||||
# Borramos marcas de arranque de Windows
|
||||
for f in glob.glob ('/mnt/*/ogboot.*') + glob.glob ('/mnt/*/*/ogboot.*'):
|
||||
os.unlink (f)
|
||||
|
||||
# Volver a registrar los errores.
|
||||
#os.environ.pop('DEBUG', None)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
Loading…
Reference in New Issue