From f6064b962dda32d73187aecb6c669c1b4c7ba889 Mon Sep 17 00:00:00 2001 From: ggil Date: Thu, 7 Nov 2024 16:37:57 +0100 Subject: [PATCH] refs #631 - Modify paths in scripts and API --- README.md | 32 ++++++++--------- api/README.md | 16 ++++----- api/repo_api.py | 77 +++++++++++++++++++++++++++++----------- api/swagger.yaml | 23 ++++++------ bin/checkImage.py | 14 ++++---- bin/createTorrentSum.py | 18 +++++----- bin/deleteImage.py | 18 +++++----- bin/deleteTrashImage.py | 16 ++++----- bin/exportImage.py | 14 ++++---- bin/getRepoIface.py | 4 +-- bin/getRepoInfo.py | 4 +-- bin/getUDPcastInfo.py | 2 +- bin/getUFTPInfo.py | 2 +- bin/importImage.py | 16 ++++----- bin/recoverImage.py | 20 +++++------ bin/runTorrentSeeder.py | 2 +- bin/runTorrentTracker.py | 4 +-- bin/sendFileMcast.py | 20 +++++------ bin/sendFileUFTP.py | 16 ++++----- bin/stopUDPcast.py | 14 ++++---- bin/stopUFTP.py | 14 ++++---- bin/updateRepoInfo.py | 8 ++--- bin/updateTrashInfo.py | 8 ++--- 23 files changed, 198 insertions(+), 164 deletions(-) diff --git a/README.md b/README.md index 57fcb59..84a9c45 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Este repositorio GIT contiene la estructura de datos del repositorio de imágene - **api** ------ API de ogRepository. - **bin** ------ Scripts en Python 3 y binarios de gestión de ogRepository. - **etc** ------ Ficheros y plantillas de configuración de ogRepository. -- **packets** - Paquetes cuya intalación es requerida. +- **packets** - Paquetes cuya instalación es requerida. --- @@ -16,7 +16,7 @@ Este repositorio GIT contiene la estructura de datos del repositorio de imágene Paquetes APT requeridos: - **uftp** (se puede instalar con "sudo DEBIAN_FRONTEND=noninteractive apt install uftp -y", para que no pida la ruta predeterminada) - - **udpcast** (se puede instalar con "sudo apt install ./udpcast_20230924_amd64.deb", apuntando al paquete, que debe descargarse previamente) + - **udpcast** (se puede instalar con "sudo apt install ./udpcast_20230924_amd64.deb", apuntando al paquete) - **ctorrent** (se puede instalar con "sudo apt install ctorrent") - **bittorrent** (se puede instalar con "sudo apt install bittorrent", pero previamente hay que añadir un repositorio de Debian) - **bittornado** (se puede instalar con "sudo apt install bittornado", pero previamente hay que añadir un repositorio de Debian) @@ -28,14 +28,14 @@ Librerías Python requeridas: - **flasgger** (se puede instalar con "sudo apt install python3-flasgger") Para que todos los endpoints y scripts funcionen con la configuración actual deben existir los siguientes directorios: - - **/opt/opengnsys/images/** - - **/opt/opengnsys/images_trash/** (debe estar en la misma unidad que el anterior, o tardarán mucho las eliminaciones y restauraciones) - - **/opt/opengnsys/bin/** (aquí deben estar todos los scripts de Python, y el binario "udp-sender") - - **/opt/opengnsys/etc/** (aquí se guardan los archivos "repoinfo.json" y "trashinfo.json") - - **/opt/opengnsys/log/** (aquí se guardan los logs) + - **/opt/opengnsys/ogrepository/images/** + - **/opt/opengnsys/ogrepository/images_trash/** (debe estar en la misma partición que el anterior, o tardarán mucho las eliminaciones y restauraciones) + - **/opt/opengnsys/ogrepository/bin/** (aquí deben estar todos los scripts de Python, y el binario "udp-sender") + - **/opt/opengnsys/ogrepository/etc/** (aquí se guardan los archivos "repoinfo.json" y "trashinfo.json") + - **/opt/opengnsys/ogrepository/log/** (aquí se guardan los logs) Y también debe existir el siguiente archivo: - - **/opt/opengnsys/etc/ogAdmRepo.cfg** (de aquí pilla la IP de ogRepository) + - **/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg** (de aquí pilla la IP de ogRepository) --- @@ -122,7 +122,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/stat --- ### Obtener Información de todas las Imágenes -Se devolverá la informacion contenida en el archivo "**/opt/opengnsys/etc/repoinfo.json**" (que corresponde a todas las imágenes almacenadas en el repositorio), y en el archivo "**/opt/opengnsys/etc/trashinfo.json**" (que corresponde a las imágenes que fueron eliminadas, que estarán en la papelera). +Se devolverá la informacion contenida en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" (que corresponde a todas las imágenes almacenadas en el repositorio), y en el archivo "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (que corresponde a las imágenes que fueron eliminadas, que estarán en la papelera). Se puede utilizar el script "**getRepoInfo.py**, que debe ser llamado por el endpoint. **NOTA**: El script requiere que se le pase "all" como primer parámetro (que correspondería al nombre de la imagen) y "none" como segundo parámetro (que corresponderia al nombre del subdirectorio correspondiente a la OU). Esta transformación de parámetros se realiza en la API. @@ -142,7 +142,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag ```json { "REPOSITORY": { - "directory": "/opt/opengnsys/images", + "directory": "/opt/opengnsys/ogrepository/images", "images": [ { "name": "Ubuntu24", @@ -191,7 +191,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag } }, "TRASH": { - "directory": "/opt/opengnsys/images_trash", + "directory": "/opt/opengnsys/ogrepository/images_trash", "images": [], "ous": [ { @@ -228,7 +228,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag --- ### Obtener Información de una Imagen concreta -Se devolverá la informacion de la imagen especificada, que puede estar en el archivo "**/opt/opengnsys/etc/repoinfo.json**" o en el archivo "**/opt/opengnsys/etc/trashinfo.json**" (en este último caso, si la imagen está en la papelera). +Se devolverá la informacion de la imagen especificada, que puede estar en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" o en el archivo "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (en este último caso, si la imagen está en la papelera). Se puede utilizar el script "**getRepoInfo.py**, que debe ser llamado por el endpoint. **NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, y el subdirectorio correspondiente a la OU (o "none" si no es el caso) como segundo parámetro. Estos datos se obtienen en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), y alli se realiza la transformación de parámetros. @@ -248,7 +248,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag - **Contenido:** Información de la imagen en formato JSON. ```json { - "directory": "/opt/opengnsys/images", + "directory": "/opt/opengnsys/ogrepository/images", "images": [ { "name": "Windows10", @@ -279,7 +279,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag --- ### Actualizar Información del Repositorio -Se actualizará la información de las imágenes almacenadas en el repositorio, reflejándola en el archivo "**/opt/opengnsys/etc/repoinfo.json**". +Se actualizará la información de las imágenes almacenadas en el repositorio, reflejándola en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**". Se puede hacer con el script "**updateRepoInfo.py**", que debe ser llamado por el endpoint (y que es similar al script bash original "**checkrepo**"). Este endpoint es llamado por el script "**deleteImage.py**" (para actualizar la información cada vez que se elimine una imagen), y creemos que también debe ser llamado por ogCore u ogLive cada vez que se haya creado una imagen. @@ -423,7 +423,7 @@ Se puede hacer con el script "**exportImage.py**", que debe ser llamado por el e **Cuerpo de la Solicitud (JSON):** - **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). - **repo_ip**: Dirección IP del repositorio remoto (al que se exportrará la imagen). -- **user**: Usuario con el que acceder al repositorio remoto. +- **user**: Usuario con el que acceder al repositorio remoto. **Ejemplo de Solicitud:** @@ -448,7 +448,7 @@ Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por **Cuerpo de la Solicitud (JSON):** - **image**: Nombre de la imagen (con extensión). -- **ou_subdir**: Subdirectorio correspondiente a la OU (o "none" si no es el caso). +- **ou_subdir**: Subdirectorio correspondiente a la OU (o "none" si no es el caso). **Ejemplo de Solicitud:** diff --git a/api/README.md b/api/README.md index bba6fa6..91a6df3 100644 --- a/api/README.md +++ b/api/README.md @@ -82,7 +82,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/stat --- ### Obtener Información de todas las Imágenes -Se devolverá la informacion contenida en el archivo "**/opt/opengnsys/etc/repoinfo.json**" (que corresponde a todas las imágenes almacenadas en el repositorio), y en el archivo "**/opt/opengnsys/etc/trashinfo.json**" (que corresponde a las imágenes que fueron eliminadas, que estarán en la papelera). +Se devolverá la informacion contenida en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" (que corresponde a todas las imágenes almacenadas en el repositorio), y en el archivo "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (que corresponde a las imágenes que fueron eliminadas, que estarán en la papelera). Se puede utilizar el script "**getRepoInfo.py**, que debe ser llamado por el endpoint. **NOTA**: El script requiere que se le pase "all" como primer parámetro (que correspondería al nombre de la imagen) y "none" como segundo parámetro (que corresponderia al nombre del subdirectorio correspondiente a la OU). Esta transformación de parámetros se realiza en la API. @@ -102,7 +102,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag ```json { "REPOSITORY": { - "directory": "/opt/opengnsys/images", + "directory": "/opt/opengnsys/ogrepository/images", "images": [ { "name": "Ubuntu24", @@ -151,7 +151,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag } }, "TRASH": { - "directory": "/opt/opengnsys/images_trash", + "directory": "/opt/opengnsys/ogrepository/images_trash", "images": [], "ous": [ { @@ -188,7 +188,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag --- ### Obtener Información de una Imagen concreta -Se devolverá la informacion de la imagen especificada, que puede estar en el archivo "**/opt/opengnsys/etc/repoinfo.json**" o en el archivo "**/opt/opengnsys/etc/trashinfo.json**" (en este último caso, si la imagen está en la papelera). +Se devolverá la informacion de la imagen especificada, que puede estar en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" o en el archivo "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (en este último caso, si la imagen está en la papelera). Se puede utilizar el script "**getRepoInfo.py**, que debe ser llamado por el endpoint. **NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, y el subdirectorio correspondiente a la OU (o "none" si no es el caso) como segundo parámetro. Estos datos se obtienen en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), y alli se realiza la transformación de parámetros. @@ -208,7 +208,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag - **Contenido:** Información de la imagen en formato JSON. ```json { - "directory": "/opt/opengnsys/images", + "directory": "/opt/opengnsys/ogrepository/images", "images": [ { "name": "Windows10", @@ -239,7 +239,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag --- ### Actualizar Información del Repositorio -Se actualizará la información de las imágenes almacenadas en el repositorio, reflejándola en el archivo "**/opt/opengnsys/etc/repoinfo.json**". +Se actualizará la información de las imágenes almacenadas en el repositorio, reflejándola en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**". Se puede hacer con el script "**updateRepoInfo.py**", que debe ser llamado por el endpoint (y que es similar al script bash original "**checkrepo**"). Este endpoint es llamado por el script "**deleteImage.py**" (para actualizar la información cada vez que se elimine una imagen), y creemos que también debe ser llamado por ogCore u ogLive cada vez que se haya creado una imagen. @@ -383,7 +383,7 @@ Se puede hacer con el script "**exportImage.py**", que debe ser llamado por el e **Cuerpo de la Solicitud (JSON):** - **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). - **repo_ip**: Dirección IP del repositorio remoto (al que se exportrará la imagen). -- **user**: Usuario con el que acceder al repositorio remoto. +- **user**: Usuario con el que acceder al repositorio remoto. **Ejemplo de Solicitud:** @@ -408,7 +408,7 @@ Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por **Cuerpo de la Solicitud (JSON):** - **image**: Nombre de la imagen (con extensión). -- **ou_subdir**: Subdirectorio correspondiente a la OU (o "none" si no es el caso). +- **ou_subdir**: Subdirectorio correspondiente a la OU (o "none" si no es el caso). **Ejemplo de Solicitud:** diff --git a/api/repo_api.py b/api/repo_api.py index 2b63b09..bac5742 100644 --- a/api/repo_api.py +++ b/api/repo_api.py @@ -27,6 +27,7 @@ import paramiko import logging import threading import requests +import random # Imports para Swagger: from flasgger import Swagger import yaml @@ -36,10 +37,12 @@ import yaml # VARIABLES # -------------------------------------------------------------------------------------------- -repo_path = '/opt/opengnsys/images/' -script_path = '/opt/opengnsys/bin' -repo_file = '/opt/opengnsys/etc/repoinfo.json' -trash_file = '/opt/opengnsys/etc/trashinfo.json' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final +script_path = '/opt/opengnsys/ogrepository/bin' +repo_file = '/opt/opengnsys/ogrepository/etc/repoinfo.json' +trash_file = '/opt/opengnsys/ogrepository/etc/trashinfo.json' + +ogcore_ip = '192.168.56.101' # En la versión final, se tendrá que pillar de una variable de entorno """ repo_path = '/home/user/images/' @@ -147,7 +150,7 @@ def search_process(process, string_to_search): # --------------------------------------------------------- -def check_lock_local(image_file_path): +def check_lock_local(image_file_path, job_id): """ Cada minuto comprueba si existe un archivo ".lock" asociado a la imagen que recibe como parámetro (lo que significará que hay una tarea en curso), en el repositorio local. Cuando no encuentre el archivo ".lock" lo comunicará a ogCore, llamando a un endpoint, @@ -158,9 +161,17 @@ def check_lock_local(image_file_path): # Creamos un bucle infinito: while True: - # Si ya no existe el archivo ".lock", imprimimos un mensaje en la API, y salimos del bucle: + # Si ya no existe el archivo ".lock", imprimimos un mensaje en la API, respondemos a ogCore y salimos del bucle: if not os.path.exists(f"{image_file_path}.lock"): - app.logger.info("Task finalized (no .lock file)") # De momento solamente imprimimos un mensaje en la API (pero debe llamar a un endpoint) + app.logger.info("Task finalized (no .lock file)") + app.logger.info(f"Job_ID: {job_id}") + + # Almacenamos en un diccionario los datos a enviar a ogCore: + data = { + 'job_id': job_id + } + # Llamamos al endpoint de ogCore, enviando los datos (de momento comento la llamada, porque la función llama a un endpoint inexistente): + #recall_ogcore(data) break # Si aun existe el archivo ".lock", imprimimos un mensaje en la API: else: @@ -172,7 +183,7 @@ def check_lock_local(image_file_path): # --------------------------------------------------------- -def check_lock_remote(image_file_path, remote_host, remote_user): +def check_lock_remote(image_file_path, remote_host, remote_user, job_id): """ Cada minuto comprueba si existe un archivo ".lock" asociado a la imagen que recibe como parámetro (lo que significará que hay una tarea en curso), en un repositorio remoto (al que conecta por SSH/SFTP). Cuando no encuentre el archivo ".lock" lo comunicará a ogCore, llamando a un endpoint, @@ -199,8 +210,16 @@ def check_lock_remote(image_file_path, remote_host, remote_user): sftp_client.stat(f"{image_file_path}.lock") app.logger.info("Task in process (.lock file exists)") except IOError: - # Si ya no existe el archivo ".lock", imprimimos un mensaje en la API, y salimos del bucle: - app.logger.info("Task finalized (no .lock file)") # De momento solamente imprimimos un mensaje en la API (pero debe llamar a un endpoint) + # Si ya no existe el archivo ".lock", imprimimos un mensaje en la API, respondemos a ogCore y salimos del bucle: + app.logger.info("Task finalized (no .lock file)") + app.logger.info(f"Job_ID: {job_id}") + + # Almacenamos en un diccionario los datos a enviar a ogCore: + data = { + 'job_id': job_id + } + # Llamamos al endpoint de ogCore, enviando los datos (de momento comento la llamada, porque la función llama a un endpoint inexistente): + #recall_ogcore(data) break # Esperamos 1 minuto para volver a realizar la comprobación: sleep(60) @@ -213,7 +232,7 @@ def check_lock_remote(image_file_path, remote_host, remote_user): # --------------------------------------------------------- -def check_aux_files(image_file_path): +def check_aux_files(image_file_path, job_id): """ Cada 10 segundos comprueba si se han creado todos los archivos auxiliares de la imagen que recibe como parámetro, en cuyo caso lo comunicará a ogCore, llamando a un endpoint, y dejará de realizar la comprobación. También obtiene el valor del archivo ".full.sum" (que corresonde al ID), y se lo comunica a ogCore. @@ -223,17 +242,18 @@ def check_aux_files(image_file_path): # Si faltan archivos auxiliares por crear, imprimimos un mensaje en la API: if not os.path.exists(f"{image_file_path}.size") or not os.path.exists(f"{image_file_path}.sum") or not os.path.exists(f"{image_file_path}.full.sum") or not os.path.exists(f"{image_file_path}.torrent") or not os.path.exists(f"{image_file_path}.info.checked"): app.logger.info("Task in process (auxiliar files remaining)") - # Si ya se han creado todos los archivos auxiliares, imprimimos un mensaje en la API, y salimos del bucle: + # Si ya se han creado todos los archivos auxiliares, imprimimos un mensaje en la API, respondemos a ogCore y salimos del bucle: else: - app.logger.info("Task finalized (all auxilar files created)") # De momento solamente imprimimos un mensaje en la API (pero debe llamar a un endpoint) + app.logger.info("Task finalized (all auxilar files created)") # Obtenemos el valor del archivo "full.sum", que corresponde al ID, y lo imprimimos: with open(f"{image_file_path}.full.sum", 'r') as file: image_id = file.read().strip('\n') + app.logger.info(f"Job_ID: {job_id}") app.logger.info(f"Image_ID: {image_id}") # Almacenamos en un diccionario los datos a enviar a ogCore: data = { - 'job_id': 222, # Este no es un dato real (deberá pasarmelo ogCore previamente) + 'job_id': job_id, 'image_id': image_id } # Llamamos al endpoint de ogCore, enviando los datos (de momento comento la llamada, porque la función llama a un endpoint inexistente): @@ -252,7 +272,7 @@ def recall_ogcore(data): que estaba corriendo en un proceso independiente (no controlado por los endpoints). """ # Almacenamos la URL del endpoint de ogCore: - endpoint_url = 'http://192.168.56.101:8006//ogcore/v1/test' + endpoint_url = f"http://{ogcore_ip}:8006//ogcore/v1/test" # Almacenamos los headers, y convertiomos "data" a JSON: headers = {'content-type': 'application/json'} @@ -635,6 +655,7 @@ def import_image(): ou_subdir = json_data.get("ou_subdir") remote_ip = json_data.get("repo_ip") remote_user = json_data.get("user") + ogcore_ip = json_data.get("ogcore_ip") # Evaluamos los parámetros obtenidos, para construir la ruta de la imagen: if ou_subdir == "none": @@ -649,16 +670,20 @@ def import_image(): # Ejecutamos el script "importImage.py" (con los parámetros almacenados), y almacenamos el resultado (pero sin esperar a que termine el proceso): result = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + # Generamos el ID para identificar el trabajo asíncrono: + job_id = '{}-{}'.format ('ImportImage', ''.join(random.choice('0123456789abcdef') for _ in range(8))) + # Evaluamos el resultado de la ejecución, y devolvemos una respuesta: if result.returncode is None: # Si el resultado es correcto, llamamos a la función "check_lock_local" en un hilo paralelo # (para que compruebe si la imagen se ha acabado de importar exitosamente): - threading.Thread(target=check_lock_local, args=(image_file_path,)).start() + threading.Thread(target=check_lock_local, args=(image_file_path, job_id,)).start() # Informamos que la imagen se está importando, y salimos del endpoint: return jsonify({ "success": True, - "output": "Importing image..." + "output": "Importing image...", + "job_id": job_id }), 200 else: return jsonify({ @@ -709,6 +734,7 @@ def export_image(): image_id = json_data.get("ID_img") remote_ip = json_data.get("repo_ip") remote_user = json_data.get("user") + ogcore_ip = json_data.get("ogcore_ip") # Obtenemos el nombre y la extensión de la imagen (y el subdirectorio de OU, si fuera el caso): param_dict = get_image_params(image_id, "repo") @@ -732,16 +758,20 @@ def export_image(): # Ejecutamos el script "exportImage.py" (con los parámetros almacenados), y almacenamos el resultado (pero sin esperar a que termine el proceso): result = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + # Generamos el ID para identificar el trabajo asíncrono: + job_id = '{}-{}'.format ('ExportImage', ''.join(random.choice('0123456789abcdef') for _ in range(8))) + # Evaluamos el resultado de la ejecución, y devolvemos una respuesta: if result.returncode is None: # Si el resultado es correcto, llamamos a la función "check_lock_remote" en un hilo paralelo # (para que compruebe si la imagen se ha acabado de exportar exitosamente): - threading.Thread(target=check_lock_remote, args=(f"{repo_path}{image_file_path}", remote_ip, remote_user,)).start() + threading.Thread(target=check_lock_remote, args=(f"{repo_path}{image_file_path}", remote_ip, remote_user, job_id,)).start() # Informamos que la imagen se está exportando, y salimos del endpoint: return jsonify({ "success": True, - "output": "Exporting image..." + "output": "Exporting image...", + "job_id": job_id }), 200 else: return jsonify({ @@ -789,6 +819,7 @@ def create_torrent_sum(): json_data = json.loads(request.data) image_name = json_data.get("image") ou_subdir = json_data.get("ou_subdir") + ogcore_ip = json_data.get("ogcore_ip") # Evaluamos los parámetros obtenidos, para construir la ruta de la imagen (relativa a "repo_path"): if ou_subdir == "none": @@ -803,16 +834,20 @@ def create_torrent_sum(): # Ejecutamos el script "createTorrentSum.py" (con los parámetros almacenados), y almacenamos el resultado (pero sin esperar a que termine el proceso): result = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + # Generamos el ID para identificar el trabajo asíncrono: + job_id = '{}-{}'.format ('CreateAuxiliarFiles', ''.join(random.choice('0123456789abcdef') for _ in range(8))) + # Evaluamos el resultado de la ejecución, y devolvemos una respuesta: if result.returncode is None: # Si el resultado es correcto, llamamos a la función "check_aux_files" en un hilo paralelo # (para que compruebe si se han creado todos los archivos auxiliares exitosamente): - threading.Thread(target=check_aux_files, args=(f"{repo_path}{image_file_path}",)).start() + threading.Thread(target=check_aux_files, args=(f"{repo_path}{image_file_path}", job_id,)).start() # Informamos que los archivos auxiliares se están creando, y salimos del endpoint: return jsonify({ "success": True, - "output": "Creating auxiliar files..." + "output": "Creating auxiliar files...", + "job_id": job_id }), 200 else: return jsonify({ diff --git a/api/swagger.yaml b/api/swagger.yaml index cf4c185..e30025f 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -14,7 +14,7 @@ info: Paquetes APT requeridos: - **uftp** (se puede instalar con "sudo DEBIAN_FRONTEND=noninteractive apt install uftp -y", para que no pida la ruta predeterminada) - - **udpcast** (se puede instalar con "sudo apt install ./udpcast_20230924_amd64.deb", apuntando al paquete, que debe descargarse previamente) + - **udpcast** (se puede instalar con "sudo apt install ./udpcast_20230924_amd64.deb", apuntando al paquete) - **ctorrent** (se puede instalar con "sudo apt install ctorrent") - **bittorrent** (se puede instalar con "sudo apt install bittorrent", pero previamente hay que añadir un repositorio de Debian) - **bittornado** (se puede instalar con "sudo apt install bittornado", pero previamente hay que añadir un repositorio de Debian) @@ -26,14 +26,14 @@ info: - **flasgger** (se puede instalar con "sudo apt install python3-flasgger") Para que todos los endpoints de la API funcionen con la configuración actual deben existir los siguientes directorios: - - **/opt/opengnsys/images/** - - **/opt/opengnsys/images_trash/** (debe estar en la misma unidad que el anterior, o tardarán mucho las eliminaciones y restauraciones) - - **/opt/opengnsys/bin/** (aquí deben estar todos los scripts de Python, y el binario "udp-sender") - - **/opt/opengnsys/etc/** (aquí se guardan los archivos "repoinfo.json" y "trashinfo.json") - - **/opt/opengnsys/log/** (aquí se guardan los logs) + - **/opt/opengnsys/ogrepository/images/** + - **/opt/opengnsys/ogrepository/images_trash/** (debe estar en la misma partición que el anterior, o tardarán mucho las eliminaciones y restauraciones) + - **/opt/opengnsys/ogrepository/bin/** (aquí deben estar todos los scripts de Python, y el binario "udp-sender") + - **/opt/opengnsys/ogrepository/etc/** (aquí se guardan los archivos "repoinfo.json" y "trashinfo.json") + - **/opt/opengnsys/ogrepository/log/** (aquí se guardan los logs) Y también debe existir el siguiente archivo: - - **/opt/opengnsys/etc/ogAdmRepo.cfg** (de aquí pilla la IP de ogRepository) + - **/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg** (de aquí pilla la IP de ogRepository) --- @@ -238,7 +238,7 @@ paths: properties: directory: type: string - example: "/opt/opengnsys/images" + example: "/opt/opengnsys/ogrepository/images" images: type: array items: @@ -322,7 +322,7 @@ paths: properties: directory: type: string - example: "/opt/opengnsys/images_trash" + example: "/opt/opengnsys/ogrepository/images_trash" images: type: array items: @@ -424,7 +424,7 @@ paths: properties: directory: type: string - example: "/opt/opengnsys/images" + example: "/opt/opengnsys/ogrepository/images" images: type: array items: @@ -1528,7 +1528,7 @@ paths: properties: ID_img: type: string - example: "image_id" + example: "22735b9070e4a8043371b8c6ae52b90d" repo_ip: type: string description: "Dirección IP del repositorio remoto" @@ -1658,7 +1658,6 @@ paths: example: "Windows10.img" ou_subdir: type: string - description: "Subdirectorio correspondiente a la OU (o 'none' si no es el caso)" example: "none" responses: "200": diff --git a/bin/checkImage.py b/bin/checkImage.py index d93443b..e97867d 100644 --- a/bin/checkImage.py +++ b/bin/checkImage.py @@ -9,10 +9,10 @@ Este script comprueba la integridad de la imagen que recibe como parámetro, vol ------------ sys.argv[1] - Nombre completo de la imagen a chequear (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img Sintaxis ---------- @@ -21,10 +21,10 @@ sys.argv[1] - Nombre completo de la imagen a chequear (con o sin ruta), pero inc Ejemplos --------- ./checkImage.py image1.img -./checkImage.py /opt/opengnsys/images/image1.img +./checkImage.py /opt/opengnsys/ogrepository/images/image1.img ./checkImage.py ou_subdir/image1.img ./checkImage.py /ou_subdir/image1.img -./checkImage.py /opt/opengnsys/images/ou_subdir/image1.img +./checkImage.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -41,7 +41,7 @@ import hashlib # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final # -------------------------------------------------------------------------------------------- @@ -55,10 +55,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Ejemplo1: {script_name} image1.img - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img Ejemplo3: {script_name} ou_subdir/image1.img Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ print(help_text) diff --git a/bin/createTorrentSum.py b/bin/createTorrentSum.py index d4973a9..83d2a0e 100644 --- a/bin/createTorrentSum.py +++ b/bin/createTorrentSum.py @@ -12,10 +12,10 @@ Debería ser llamado por ogCore u ogLive cada vez que se cree una imagen. ------------ sys.argv[1] - Nombre completo de la imagen (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img Sintaxis ---------- @@ -24,10 +24,10 @@ sys.argv[1] - Nombre completo de la imagen (con o sin ruta), pero incluyendo el Ejemplos --------- ./createTorrentSum.py image1.img -./createTorrentSum.py /opt/opengnsys/images/image1.img +./createTorrentSum.py /opt/opengnsys/ogrepository/images/image1.img ./createTorrentSum.py ou_subdir/image1.img ./createTorrentSum.py /ou_subdir/image1.img -./createTorrentSum.py /opt/opengnsys/images/ou_subdir/image1.img +./createTorrentSum.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -45,9 +45,9 @@ import hashlib # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' -config_file = '/opt/opengnsys/etc/ogAdmRepo.cfg' -update_repo_script = '/opt/opengnsys/bin/updateRepoInfo.py' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final +config_file = '/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg' +update_repo_script = '/opt/opengnsys/ogrepository/bin/updateRepoInfo.py' @@ -62,10 +62,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Ejemplo1: {script_name} image1.img - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img Ejemplo3: {script_name} ou_subdir/image1.img Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ print(help_text) diff --git a/bin/deleteImage.py b/bin/deleteImage.py index 5b512b5..d51f0f1 100644 --- a/bin/deleteImage.py +++ b/bin/deleteImage.py @@ -11,10 +11,10 @@ Llama al script "updateRepoInfo.py", para actualizar la información del reposit ------------ sys.argv[1] - Nombre completo de la imagen a eliminar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img sys.argv[2] - Parámetro opcional para especificar que la eliminación sea permanente (sin papelera). - Ejemplo: -p @@ -26,10 +26,10 @@ sys.argv[2] - Parámetro opcional para especificar que la eliminación sea perma Ejemplos --------- ./deleteImage.py image1.img -p -./deleteImage.py /opt/opengnsys/images/image1.img -p +./deleteImage.py /opt/opengnsys/ogrepository/images/image1.img -p ./deleteImage.py ou_subdir/image1.img -p ./deleteImage.py /ou_subdir/image1.img -./deleteImage.py /opt/opengnsys/images/ou_subdir/image1.img +./deleteImage.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -49,9 +49,9 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' -trash_path = '/opt/opengnsys/images_trash/' -update_repo_script = '/opt/opengnsys/bin/updateRepoInfo.py' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final +trash_path = '/opt/opengnsys/ogrepository/images_trash/' +update_repo_script = '/opt/opengnsys/ogrepository/bin/updateRepoInfo.py' # -------------------------------------------------------------------------------------------- @@ -66,10 +66,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name [-p] Ejemplo1: {script_name} image1.img -p - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img -p + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img -p Ejemplo3: {script_name} ou_subdir/image1.img -p Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ print(help_text) diff --git a/bin/deleteTrashImage.py b/bin/deleteTrashImage.py index df18372..8f9a4bb 100644 --- a/bin/deleteTrashImage.py +++ b/bin/deleteTrashImage.py @@ -9,10 +9,10 @@ Llama al script "updateTrashInfo.py", para actualizar la información de las im ------------ sys.argv[1] - Nombre completo de la imagen a eliminar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images_trash/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images_trash/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images_trash/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images_trash/ou_subdir/image1.img Sintaxis ---------- @@ -21,10 +21,10 @@ sys.argv[1] - Nombre completo de la imagen a eliminar (con o sin ruta), pero inc Ejemplos --------- ./deleteTrashImage.py image1.img -./deleteTrashImage.py /opt/opengnsys/images_trash/image1.img +./deleteTrashImage.py /opt/opengnsys/ogrepository/images_trash/image1.img ./deleteTrashImage.py ou_subdir/image1.img ./deleteTrashImage.py /ou_subdir/image1.img -./deleteTrashImage.py /opt/opengnsys/images_trash/ou_subdir/image1.img +./deleteTrashImage.py /opt/opengnsys/ogrepository/images_trash/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -41,8 +41,8 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -trash_path = '/opt/opengnsys/images_trash/' -update_trash_script = '/opt/opengnsys/bin/updateTrashInfo.py' +trash_path = '/opt/opengnsys/ogrepository/images_trash/' # No borrar la barra final +update_trash_script = '/opt/opengnsys/ogrepository/bin/updateTrashInfo.py' # -------------------------------------------------------------------------------------------- @@ -57,10 +57,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Ejemplo1: {script_name} image1.img - Ejemplo2: {script_name} /opt/opengnsys/images_trash/image1.img + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images_trash/image1.img Ejemplo3: {script_name} ou_subdir/image1.img Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images_trash/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images_trash/ou_subdir/image1.img """ print(help_text) diff --git a/bin/exportImage.py b/bin/exportImage.py index 15eba23..c54bfdb 100644 --- a/bin/exportImage.py +++ b/bin/exportImage.py @@ -13,10 +13,10 @@ Librerías Python requeridas: "paramiko" (se puede instalar con "sudo apt instal ------------ sys.argv[1] - Nombre completo de la imagen a exportar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img sys.argv[2] - IP o hostname del repositorio remoto. - Ejemplo1: 192.168.56.100 @@ -33,10 +33,10 @@ sys.argv[3] - Usuario con el que conectar al repositorio remoto. Ejemplos --------- ./exportImage.py image1.img 192.168.56.100 user -./exportImage.py /opt/opengnsys/images/image1.img 192.168.56.100 user +./exportImage.py /opt/opengnsys/ogrepository/images/image1.img 192.168.56.100 user ./exportImage.py ou_subdir/image1.img remote_hostname user ./exportImage.py /ou_subdir/image1.img remote_hostname root -./exportImage.py /opt/opengnsys/images/ou_subdir/image1.img remote_hostname root +./exportImage.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img remote_hostname root """ # -------------------------------------------------------------------------------------------- @@ -57,7 +57,7 @@ import warnings # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final # -------------------------------------------------------------------------------------------- @@ -71,10 +71,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name remote_host remote_user Ejemplo1: {script_name} image1.img 192.168.56.100 user - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img 192.168.56.100 user + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img 192.168.56.100 user Ejemplo3: {script_name} ou_subdir/image1.img remote_hostname user Ejemplo4: {script_name} /ou_subdir/image1.img remote_hostname root - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img remote_hostname root + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img remote_hostname root """ print(help_text) diff --git a/bin/getRepoIface.py b/bin/getRepoIface.py index f0d105b..84284e2 100644 --- a/bin/getRepoIface.py +++ b/bin/getRepoIface.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- """ -Este script obtiene y devuelve la interfaz de red asociada a la IP especificada en el archivo "/opt/opengnsys/etc/ogAdmRepo.cfg" (en la clave "IPlocal"). +Este script obtiene y devuelve la interfaz de red asociada a la IP especificada en el archivo "/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg" (en la clave "IPlocal"). En principio, debería hacer lo mismo que el script bash original (cuyo nombre es "getRepoIface", a secas). No recibe ningún parámetro, y siempre es llamado por otros scripts, que necesitan dicha interfaz (por ejemplo, "sendFileMcast"). @@ -21,7 +21,7 @@ import struct # VARIABLES # -------------------------------------------------------------------------------------------- -config_file = '/opt/opengnsys/etc/ogAdmRepo.cfg' +config_file = '/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg' # -------------------------------------------------------------------------------------------- diff --git a/bin/getRepoInfo.py b/bin/getRepoInfo.py index 2c235bd..c8a2b46 100644 --- a/bin/getRepoInfo.py +++ b/bin/getRepoInfo.py @@ -40,8 +40,8 @@ import json # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_file = '/opt/opengnsys/etc/repoinfo.json' -trash_file = '/opt/opengnsys/etc/trashinfo.json' +repo_file = '/opt/opengnsys/ogrepository/etc/repoinfo.json' +trash_file = '/opt/opengnsys/ogrepository/etc/trashinfo.json' # -------------------------------------------------------------------------------------------- diff --git a/bin/getUDPcastInfo.py b/bin/getUDPcastInfo.py index 5fa272f..f525a96 100644 --- a/bin/getUDPcastInfo.py +++ b/bin/getUDPcastInfo.py @@ -23,7 +23,7 @@ import sys # VARIABLES # -------------------------------------------------------------------------------------------- -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final # -------------------------------------------------------------------------------------------- diff --git a/bin/getUFTPInfo.py b/bin/getUFTPInfo.py index a34ee21..6d0579e 100644 --- a/bin/getUFTPInfo.py +++ b/bin/getUFTPInfo.py @@ -23,7 +23,7 @@ import sys # VARIABLES # -------------------------------------------------------------------------------------------- -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final # -------------------------------------------------------------------------------------------- diff --git a/bin/importImage.py b/bin/importImage.py index 31a1a2e..227c86c 100644 --- a/bin/importImage.py +++ b/bin/importImage.py @@ -13,10 +13,10 @@ Librerías Python requeridas: "paramiko" (se puede instalar con "sudo apt instal ------------ sys.argv[1] - Nombre completo de la imagen a importar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img sys.argv[2] - IP o hostname del repositorio remoto. - Ejemplo1: 192.168.56.100 @@ -33,10 +33,10 @@ sys.argv[3] - Usuario con el que conectar al repositorio remoto. Ejemplos --------- ./importImage.py image1.img 192.168.56.100 user -./importImage.py /opt/opengnsys/images/image1.img 192.168.56.100 user +./importImage.py /opt/opengnsys/ogrepository/images/image1.img 192.168.56.100 user ./importImage.py ou_subdir/image1.img remote_hostname user ./importImage.py /ou_subdir/image1.img remote_hostname root -./importImage.py /opt/opengnsys/images/ou_subdir/image1.img remote_hostname root +./importImage.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img remote_hostname root """ # -------------------------------------------------------------------------------------------- @@ -57,8 +57,8 @@ import warnings # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' -update_repo_script = '/opt/opengnsys/bin/updateRepoInfo.py' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final +update_repo_script = '/opt/opengnsys/ogrepository/bin/updateRepoInfo.py' # -------------------------------------------------------------------------------------------- @@ -72,10 +72,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name remote_host remote_user Ejemplo1: {script_name} image1.img 192.168.56.100 user - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img 192.168.56.100 user + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img 192.168.56.100 user Ejemplo3: {script_name} ou_subdir/image1.img remote_hostname user Ejemplo4: {script_name} /ou_subdir/image1.img remote_hostname root - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img remote_hostname root + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img remote_hostname root """ print(help_text) diff --git a/bin/recoverImage.py b/bin/recoverImage.py index 970401b..e68b683 100644 --- a/bin/recoverImage.py +++ b/bin/recoverImage.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- """ -Este script recupera la imagen que recibe como parámetro (y todos sus archivos asociados), moviendo los archivos a "/opt/opengnsys/images", desde la papelera +Este script recupera la imagen que recibe como parámetro (y todos sus archivos asociados), moviendo los archivos a "/opt/opengnsys/ogrepository/images", desde la papelera (respetando el subdirectorio correspondiente a la OU, si fuera el caso). Llama al script "updateRepoInfo.py", para actualizar la información del repositorio. @@ -10,10 +10,10 @@ Llama al script "updateRepoInfo.py", para actualizar la información del reposit ------------ sys.argv[1] - Nombre completo de la imagen a recuperar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images_trash/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images_trash/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images_trash/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images_trash/ou_subdir/image1.img Sintaxis ---------- @@ -22,10 +22,10 @@ sys.argv[1] - Nombre completo de la imagen a recuperar (con o sin ruta), pero in Ejemplos --------- ./recoverImage.py image1.img -./recoverImage.py /opt/opengnsys/images_trash/image1.img +./recoverImage.py /opt/opengnsys/ogrepository/images_trash/image1.img ./recoverImage.py ou_subdir/image1.img ./recoverImage.py /ou_subdir/image1.img -./recoverImage.py /opt/opengnsys/images_trash/ou_subdir/image1.img +./recoverImage.py /opt/opengnsys/ogrepository/images_trash/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -43,9 +43,9 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' -trash_path = '/opt/opengnsys/images_trash/' -update_repo_script = '/opt/opengnsys/bin/updateRepoInfo.py' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final +trash_path = '/opt/opengnsys/ogrepository/images_trash/' # No borrar la barra final +update_repo_script = '/opt/opengnsys/ogrepository/bin/updateRepoInfo.py' # -------------------------------------------------------------------------------------------- @@ -59,10 +59,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Ejemplo1: {script_name} image1.img - Ejemplo2: {script_name} /opt/opengnsys/images_trash/image1.img + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images_trash/image1.img Ejemplo3: {script_name} ou_subdir/image1.img Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images_trash/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images_trash/ou_subdir/image1.img """ print(help_text) diff --git a/bin/runTorrentSeeder.py b/bin/runTorrentSeeder.py index 2ebd64c..11b8735 100644 --- a/bin/runTorrentSeeder.py +++ b/bin/runTorrentSeeder.py @@ -37,7 +37,7 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images' +repo_path = '/opt/opengnsys/ogrepository/images' # En este caso, no lleva barra final # -------------------------------------------------------------------------------------------- diff --git a/bin/runTorrentTracker.py b/bin/runTorrentTracker.py index 9a5d6c4..48f89cc 100644 --- a/bin/runTorrentTracker.py +++ b/bin/runTorrentTracker.py @@ -38,11 +38,11 @@ import time # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images' +repo_path = '/opt/opengnsys/ogrepository/images' # En este caso, no lleva barra final bttrack_port = 6969 bttrack_dfile = '/tmp/dstate' -bttrack_log = '/opt/opengnsys/log/bttrack.log' +bttrack_log = '/opt/opengnsys/ogrepository/log/bttrack.log' bttrack_interval = 10 bttrack_allow_get = 0 # Este valor impide la descarga desde clientes no autorizados diff --git a/bin/sendFileMcast.py b/bin/sendFileMcast.py index 81fa35b..452769a 100644 --- a/bin/sendFileMcast.py +++ b/bin/sendFileMcast.py @@ -9,10 +9,10 @@ En principio, debería hacer lo mismo que el script bash original (cuyo nombre e ------------ sys.argv[1] - Nombre completo de la imagen a enviar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img sys.argv[2] - Parámetros Multicast (en formato "Port:Duplex:IP:Mpbs:Nclients:Timeout") - Ejemplo: 9000:full:239.194.17.2:70M:20:120 @@ -24,10 +24,10 @@ sys.argv[2] - Parámetros Multicast (en formato "Port:Duplex:IP:Mpbs:Nclients:Ti Ejemplos --------- ./sendFileMcast.py image1.img 9000:full:239.194.17.2:70M:20:120 -./sendFileMcast.py /opt/opengnsys/images/image1.img 9000:full:239.194.17.2:70M:20:120 +./sendFileMcast.py /opt/opengnsys/ogrepository/images/image1.img 9000:full:239.194.17.2:70M:20:120 ./sendFileMcast.py ou_subdir/image1.img 9000:full:239.194.17.2:70M:20:120 ./sendFileMcast.py /ou_subdir/image1.img 9000:full:239.194.17.2:70M:20:120 -./sendFileMcast.py /opt/opengnsys/images/ou_subdir/image1.img 9000:full:239.194.17.2:70M:20:120 +./sendFileMcast.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img 9000:full:239.194.17.2:70M:20:120 """ # -------------------------------------------------------------------------------------------- @@ -44,10 +44,10 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' -bin_path = '/opt/opengnsys/bin/' -repo_iface_script = '/opt/opengnsys/bin/getRepoIface.py' -log_file = '/opt/opengnsys/log/udpcast.log' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final +bin_path = '/opt/opengnsys/ogrepository/bin/' # No borrar la barra final +repo_iface_script = '/opt/opengnsys/ogrepository/bin/getRepoIface.py' +log_file = '/opt/opengnsys/ogrepository/log/udpcast.log' # -------------------------------------------------------------------------------------------- @@ -61,10 +61,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Port:Duplex:IP:Mpbs:Nclients:Timeout Ejemplo1: {script_name} image1.img 9000:full-duplex:239.194.17.2:70M:20:120 - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img 9000:full-duplex:239.194.17.2:70M:20:120 + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img 9000:full-duplex:239.194.17.2:70M:20:120 Ejemplo3: {script_name} ou_subdir/image1.img 9000:full-duplex:239.194.17.2:70M:20:120 Ejemplo4: {script_name} /ou_subdir/image1.img 9000:full-duplex:239.194.17.2:70M:20:120 - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img 9000:full-duplex:239.194.17.2:70M:20:120 + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img 9000:full-duplex:239.194.17.2:70M:20:120 """ print(help_text) diff --git a/bin/sendFileUFTP.py b/bin/sendFileUFTP.py index dabd726..85c9851 100644 --- a/bin/sendFileUFTP.py +++ b/bin/sendFileUFTP.py @@ -13,10 +13,10 @@ Paquetes APT requeridos: "uftp" (se puede instalar con "sudo apt install uftp"). ------------ sys.argv[1] - Nombre completo de la imagen a enviar (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img sys.argv[2] - Parámetros Multicast/Unicast (en formato "Port:IP:Bitrate") - Ejemplo1: 9000:239.194.17.2:100M @@ -29,10 +29,10 @@ sys.argv[2] - Parámetros Multicast/Unicast (en formato "Port:IP:Bitrate") Ejemplos --------- ./sendFileUFTP.py image1.img 9000:239.194.17.2:100M -./sendFileUFTP.py /opt/opengnsys/images/image1.img 9000:239.194.17.2:100M +./sendFileUFTP.py /opt/opengnsys/ogrepository/images/image1.img 9000:239.194.17.2:100M ./sendFileUFTP.py ou_subdir/image1.img 9000:192.168.56.101:1G ./sendFileUFTP.py /ou_subdir/image1.img 9000:192.168.56.101:1G -./sendFileUFTP.py /opt/opengnsys/images/ou_subdir/image1.img 9000:192.168.56.101:1G +./sendFileUFTP.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img 9000:192.168.56.101:1G """ # -------------------------------------------------------------------------------------------- @@ -49,9 +49,9 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final cache_path = '/opt/opengnsys/cache' -log_file = '/opt/opengnsys/log/uftp.log' +log_file = '/opt/opengnsys/ogrepository/log/uftp.log' # -------------------------------------------------------------------------------------------- @@ -65,10 +65,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Port:IP:Bitrate Ejemplo1: {script_name} image1.img 9000:239.194.17.2:100M - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img 9000:239.194.17.2:100M + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img 9000:239.194.17.2:100M Ejemplo3: {script_name} ou_subdir/image1.img 9000:192.168.56.101:1G Ejemplo4: {script_name} /ou_subdir/image1.img 9000:192.168.56.101:1G - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img 9000:192.168.56.101:1G + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img 9000:192.168.56.101:1G """ print(help_text) diff --git a/bin/stopUDPcast.py b/bin/stopUDPcast.py index f972925..83dbb91 100644 --- a/bin/stopUDPcast.py +++ b/bin/stopUDPcast.py @@ -10,10 +10,10 @@ Este script finaliza el proceso "udp-sender" asociado a la imagen que recibe com ------------ sys.argv[1] - Nombre completo de la imagen a cancelar su transmisión (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img Sintaxis ---------- @@ -22,10 +22,10 @@ sys.argv[1] - Nombre completo de la imagen a cancelar su transmisión (con o sin Ejemplos --------- ./stopUDPcast.py image1.img -./stopUDPcast.py /opt/opengnsys/images/image1.img +./stopUDPcast.py /opt/opengnsys/ogrepository/images/image1.img ./stopUDPcast.py ou_subdir/image1.img ./stopUDPcast.py /ou_subdir/image1.img -./stopUDPcast.py /opt/opengnsys/images/ou_subdir/image1.img +./stopUDPcast.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -42,7 +42,7 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final # -------------------------------------------------------------------------------------------- @@ -56,10 +56,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Ejemplo1: {script_name} image1.img - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img Ejemplo3: {script_name} ou_subdir/image1.img Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ print(help_text) diff --git a/bin/stopUFTP.py b/bin/stopUFTP.py index 377f652..18fa7b9 100644 --- a/bin/stopUFTP.py +++ b/bin/stopUFTP.py @@ -10,10 +10,10 @@ Este script finaliza el proceso "uftp" asociado a la imagen que recibe como par ------------ sys.argv[1] - Nombre completo de la imagen a cancelar su transmisión (con o sin ruta), pero incluyendo el subdirectorio correspondiente a la OU, si es el caso. - Ejemplo1: image1.img - - Ejemplo2: /opt/opengnsys/images/image1.img + - Ejemplo2: /opt/opengnsys/ogrepository/images/image1.img - Ejemplo3: ou_subdir/image1.img - Ejemplo4: /ou_subdir/image1.img - - Ejemplo5: /opt/opengnsys/images/ou_subdir/image1.img + - Ejemplo5: /opt/opengnsys/ogrepository/images/ou_subdir/image1.img Sintaxis ---------- @@ -22,10 +22,10 @@ sys.argv[1] - Nombre completo de la imagen a cancelar su transmisión (con o sin Ejemplos --------- ./stopUDPcast.py image1.img -./stopUDPcast.py /opt/opengnsys/images/image1.img +./stopUDPcast.py /opt/opengnsys/ogrepository/images/image1.img ./stopUDPcast.py ou_subdir/image1.img ./stopUDPcast.py /ou_subdir/image1.img -./stopUDPcast.py /opt/opengnsys/images/ou_subdir/image1.img +./stopUDPcast.py /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ # -------------------------------------------------------------------------------------------- @@ -42,7 +42,7 @@ import subprocess # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) -repo_path = '/opt/opengnsys/images/' +repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final # -------------------------------------------------------------------------------------------- @@ -56,10 +56,10 @@ def show_help(): help_text = f""" Sintaxis: {script_name} [ou_subdir/]image_name|/image_path/image_name Ejemplo1: {script_name} image1.img - Ejemplo2: {script_name} /opt/opengnsys/images/image1.img + Ejemplo2: {script_name} /opt/opengnsys/ogrepository/images/image1.img Ejemplo3: {script_name} ou_subdir/image1.img Ejemplo4: {script_name} /ou_subdir/image1.img - Ejemplo5: {script_name} /opt/opengnsys/images/ou_subdir/image1.img + Ejemplo5: {script_name} /opt/opengnsys/ogrepository/images/ou_subdir/image1.img """ print(help_text) diff --git a/bin/updateRepoInfo.py b/bin/updateRepoInfo.py index dab0d65..ca498d7 100644 --- a/bin/updateRepoInfo.py +++ b/bin/updateRepoInfo.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- """ -Este script actualiza la información de las imágenes del repositorio, reflejándola en el archivo "/opt/opengnsys/etc/repoinfo.json", +Este script actualiza la información de las imágenes del repositorio, reflejándola en el archivo "/opt/opengnsys/ogrepository/etc/repoinfo.json", añadiendo información de las imágenes nuevas, y borrando la información de las imágenes que fueron eliminadas. La información es obtenida desde archivos ".info", que originalmente eran eliminados, pero que en esta versión son renombrados a ".info.checked", obteniendo la misma funcionalidad. @@ -27,9 +27,9 @@ import shutil # VARIABLES # -------------------------------------------------------------------------------------------- -repo_path = '/opt/opengnsys/images' -info_file = '/opt/opengnsys/etc/repoinfo.json' -update_trash_script = '/opt/opengnsys/bin/updateTrashInfo.py' +repo_path = '/opt/opengnsys/ogrepository/images' # En este caso, no lleva barra final +info_file = '/opt/opengnsys/ogrepository/etc/repoinfo.json' +update_trash_script = '/opt/opengnsys/ogrepository/bin/updateTrashInfo.py' # -------------------------------------------------------------------------------------------- diff --git a/bin/updateTrashInfo.py b/bin/updateTrashInfo.py index 626fa44..bc0d3ea 100644 --- a/bin/updateTrashInfo.py +++ b/bin/updateTrashInfo.py @@ -2,10 +2,10 @@ # -*- coding: utf-8 -*- """ -Este script actualiza la información de las imágenes de la papelera del repositorio, reflejándola en el archivo "/opt/opengnsys/etc/trashinfo.json", +Este script actualiza la información de las imágenes de la papelera del repositorio, reflejándola en el archivo "/opt/opengnsys/ogrepository/etc/trashinfo.json", añadiendo información de las nuevas imágenes eliminadas, y borrando la información de las imágenes que fueron restauradas (o que ya no están en la papelera). La información es obtenida desde archivos ".info.checked", cuyo nombre original era ".info" - (pero que fueron renombrados al ser insertada su información en el archivo ""/opt/opengnsys/etc/repoinfo.json", antes de ser eliminadas). + (pero que fueron renombrados al ser insertada su información en el archivo ""/opt/opengnsys/ogrepository/etc/repoinfo.json", antes de ser eliminadas). No recibe ningún parámetro, y no necesita ser llamado explícitamente (porque lo llama el script "updateRepoInfo.py")". """ @@ -27,8 +27,8 @@ import shutil # VARIABLES # -------------------------------------------------------------------------------------------- -trash_path = '/opt/opengnsys/images_trash' -info_file = '/opt/opengnsys/etc/trashinfo.json' +trash_path = '/opt/opengnsys/ogrepository/images_trash' # En este caso, no lleva barra final +info_file = '/opt/opengnsys/ogrepository/etc/trashinfo.json' # --------------------------------------------------------------------------------------------