refs #1098 add ogDevToDisk()

pull/1/head
Natalia Serrano 2024-11-05 10:41:18 +01:00
parent 269fcd288d
commit c24b7ca337
1 changed files with 39 additions and 33 deletions

View File

@ -309,42 +309,48 @@ def ogDeletePartitionTable(*args):
subprocess.run(["fdisk", DISK], input="o\nw", text=True)
return
def ogDevToDisk(dev):
# Variables locales
#/**
# ogDevToDisk path_device | LABEL="str_label" | UUID="str_uuid"
#@brief Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo o a la etiqueta o UUID del sistema de archivos asociado.
#@param path_device Camino del fichero de dispositivo.
#@param str_label etiqueta de sistema de archivos.
#@param str_uuid UUID de sistema de archivos.
#@return int_ndisk (para dispositivo de disco)
#@return int_ndisk int_npartition (para dispositivo de partición).
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Dispositivo no detectado.
#@note Solo se acepta en cada llamada 1 de los 3 tipos de parámetros.
#*/ ##
def ogDevToDisk(arg_dev):
CACHEFILE = "/var/cache/disks.cfg"
PART = None
n = 1
# Si se solicita, mostrar ayuda.
if dev == "help":
ogHelp("ogDevToDisk", "ogDevToDisk path_device | LABEL=str_label | UUID=str_uuid",
"ogDevToDisk /dev/sda => 1",
"ogDevToDisk /dev/sda1 => 1 1",
"ogDevToDisk LABEL=CACHE => 1 4")
if '=' in arg_dev:
# arg_dev is "FOO=bar"
cmd = None
if arg_dev.startswith("LABEL="): cmd = ['blkid', '-L', arg_dev[6:]]
elif arg_dev.startswith("PARTLABEL="): cmd = ['realpath', '/dev/disk/by-partlabel/'+arg_dev[11:]]
elif arg_dev.startswith("PARTUUID="): cmd = ['realpath', '/dev/disk/by-partuuid/'+arg_dev[10:]]
elif arg_dev.startswith("UUID="): cmd = ['blkid', '-U', arg_dev[5:]]
if not cmd:
ogRaiseError([], ogGlobals.OG_ERR_FORMAT, arg_dev)
return
DEV = subprocess.run (cmd, capture_output=True, text=True).stdout.strip()
else:
# arg_dev is "/dev/something"
DEV = arg_dev
# Error si no se recibe 1 parámetro.
if len(dev) != 1:
ogRaiseError(OG_ERR_FORMAT)
if not os.path.exists(DEV):
ogRaiseError([], ogGlobals.OG_ERR_NOTFOUND, arg_dev)
return
# Obtener dispositivo a partir de camino, etiqueta o UUID.
DEV = dev[0]
if DEV.startswith("LABEL="):
DEV = subprocess.getoutput(f"blkid -L {DEV[6:]}")
elif DEV.startswith("PARTLABEL="):
DEV = subprocess.getoutput(f"realpath /dev/disk/by-partlabel/{DEV[11:]} 2>/dev/null")
elif DEV.startswith("PARTUUID="):
DEV = subprocess.getoutput(f"realpath /dev/disk/by-partuuid/{DEV[10:]} 2>/dev/null")
elif DEV.startswith("UUID="):
DEV = subprocess.getoutput(f"blkid -U {DEV[5:]}")
# Error si no es fichero de bloques o directorio (para LVM).
if not os.path.exists(DEV):
ogRaiseError(OG_ERR_NOTFOUND, dev)
m = os.stat (DEV, follow_symlinks=True).st_mode
if not stat.S_ISBLK (m) and not stat.S_ISDIR (m):
ogRaiseError([], ogGlobals.OG_ERR_NOTFOUND, arg_dev)
return
# Buscar en fichero de caché de discos.
PART = None
if os.path.exists(CACHEFILE):
with open(CACHEFILE, 'r') as f:
for line in f:
@ -353,19 +359,19 @@ def ogDevToDisk(dev):
PART = parts[0]
break
if PART:
return PART
if PART: return PART
# Si no se encuentra, procesa todos los discos para devolver su nº de orden y de partición.
disks = ogDiskToDev()
n = 1
for d in disks:
NVME_PREFIX = "p" if "nvme" in d else ""
if DEV.startswith(d):
return f"{n} {DEV[len(d) + len(NVME_PREFIX):]}"
n += 1
ogRaiseError(OG_ERR_NOTFOUND, dev)
return OG_ERR_NOTFOUND
ogRaiseError([], ogGlobals.OG_ERR_NOTFOUND, arg_dev)
return
def _getAllDisks():
ret = []
@ -464,7 +470,7 @@ def ogDiskToDev (arg_disk=None, arg_part=None):
# No params: return all disks
if arg_disk is None:
return " ".join(ALLDISKS)
return ALLDISKS
# arg_disk is set: return it
if arg_part is None: