From b4fe9232baf342c65e54bcc39eb9fc5f6bdbb27f Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Wed, 12 Feb 2025 13:56:11 +0100 Subject: [PATCH] refs #1496 add ogGetDiskSize --- client/lib/engine/bin/DiskLib.py | 41 +++++++++++++-------------- client/shared/functions/ogGetDiskSize | 22 ++++++++++++++ 2 files changed, 41 insertions(+), 22 deletions(-) create mode 100755 client/shared/functions/ogGetDiskSize diff --git a/client/lib/engine/bin/DiskLib.py b/client/lib/engine/bin/DiskLib.py index 73f3bc0..7480c53 100755 --- a/client/lib/engine/bin/DiskLib.py +++ b/client/lib/engine/bin/DiskLib.py @@ -595,30 +595,27 @@ def ogDiskToDev (arg_disk=None, arg_part=None): #@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo). #@note Requisitos: sfdisk, awk #*/ ## -def ogGetDiskSize(*args): - # Variables locales - DISK = SIZE = None +def ogGetDiskSize (disk): + DISK = ogDiskToDev (disk) + if not DISK: return None - # Si se solicita, mostrar ayuda. - if len(args) == 1 and args[0] == "help": - SystemLib.ogHelp('ogGetDiskSize', 'ogGetDiskSize int_ndisk', 'ogGetDiskSize 1 => 244198584') - return + bn = os.path.basename (DISK) + SIZE = None + with open ('/proc/partitions', 'r') as fd: + while True: + l = fd.readline() + if not l: break + items = l.split() + if len(items) < 4: continue + if items[3] == bn: + SIZE = int (items[2]) + break + if not SIZE: + vgs_out = subprocess.run (['vgs', '--noheadings', '--units=B', '-o', 'dev_size', DISK], capture_output=True, text=True).stdout + items = vgs_out.split() + SIZE = int (items[0]) // 1024 - # Error si no se recibe 1 parámetro. - if len(args) != 1: - SystemLib.ogRaiseError(OG_ERR_FORMAT) - return - - # Obtener el tamaño del disco. - DISK = ogDiskToDev(args[0]) - if DISK is None: - return - SIZE = subprocess.getoutput(f"lsblk -n -b -o SIZE {DISK}") - - # Mostrar salida. - if SIZE: - print(SIZE) - return + return SIZE #/** diff --git a/client/shared/functions/ogGetDiskSize b/client/shared/functions/ogGetDiskSize new file mode 100755 index 0000000..ea7c42e --- /dev/null +++ b/client/shared/functions/ogGetDiskSize @@ -0,0 +1,22 @@ +#!/usr/bin/python3 + +import sys +import argparse +from SystemLib import ogHelp +from DiskLib import ogGetDiskSize + +parser = argparse.ArgumentParser (add_help=False) +parser.add_argument ('disk') + +if 2 == len (sys.argv) and 'help' == sys.argv[1]: + #parser.print_help() sale en inglés aunque la locale indique otra cosa + ogHelp ('ogGetDiskSize', 'ogGetDiskSize int_ndisk', ['ogGetDiskSize 1']) + sys.exit (0) + +args = parser.parse_args() +ret = ogGetDiskSize (args.disk) + +if ret is not None: + if ret == True: sys.exit (0) + elif ret == False: sys.exit (1) + else: print (ret)