ogrepository/api/swagger.yaml

1760 lines
66 KiB
YAML

swagger: "2.0"
info:
title: "OgRepository API"
version: "1.0"
description: |
**API de ogRepository, programada en Flask**.
Responde a peticiones HTTP (enviadas desde ogCore) mediante endpoints, que a su vez ejecutan los scripts Python almacenados en ogRepository.
En ciertos casos, transforma los parámetros recibidos desde el portal, para adaptarlos a los que es necesario enviar a los scripts (por ejemplo, a partir del ID de una imagen obtiene su nombre, su extensión y el subdirectorio de OU).
Librerías Python requeridas:
- **flask** (se puede instalar con "sudo apt install python3-flask")
- **paramiko** (se puede instalar con "sudo apt install python3-paramiko")
- **requests** (se puede instalar con "sudo apt install python3-requests") - No tengo claro que para este paquete sea necesario
- **flasgger** (se puede instalar con "sudo apt install python3-flasgger")
# -----------------------------------------------------------------------------------------------------------
# Esto hace que el Swagger se ordene por los tags (apartados), de la forma especificada:
tags:
- name: "Estado de ogRepository"
- name: "Información de Imágenes"
- name: "Eliminar y Recuperar Imágenes"
- name: "Transferencia de Imágenes (UDPcast)"
- name: "Transferencia de Imágenes (UFTP)"
- name: "Transferencia de Imágenes (P2P)"
- name: "Importar y Exportar Imágenes"
- name: "Varios"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Estado de ogRepository"
# -----------------------------------------------------------------------------------------------------------
paths:
/ogrepository/v1/status:
get:
summary: "Obtener Información de Estado de ogRepository"
description: >
Este endpoint ejecuta el script "**getRepoStatus.py**" y devuelve su salida en formato JSON,
incluyendo información sobre la CPU, memoria RAM, disco duro, servicios, y procesos específicos de ogRepository.
tags:
- "Estado de ogRepository"
responses:
"200":
description: "La información de estado se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
properties:
cpu:
type: object
properties:
used_percentage:
type: string
example: "35%"
ram:
type: object
properties:
total:
type: string
example: "7.8GB"
used:
type: string
example: "0.3GB"
available:
type: string
example: "7.2GB"
used_percentage:
type: string
example: "7%"
disk:
type: object
properties:
total:
type: string
example: "11.7GB"
used:
type: string
example: "7.7GB"
available:
type: string
example: "3.4GB"
used_percentage:
type: string
example: "69%"
services:
type: object
properties:
ssh:
type: string
example: "active"
smbd:
type: string
example: "active"
rsync:
type: string
example: "active"
processes:
type: object
properties:
udp-sender:
type: string
example: "stopped"
uftp:
type: string
example: "stopped"
bttrack:
type: string
example: "stopped"
btlaunchmany:
type: string
example: "stopped"
"500 (Error)":
description: "Error al consultar y/o devolver la información de estado."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al consultar y/o devolver la información de estado."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Información de Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images:
put:
summary: "Actualizar Información del Repositorio"
description: |
Este endpoint actualiza la información de las imágenes almacenadas en el repositorio, reflejándola en los archivos "**repoinfo.json**" y "**trashinfo.json**".
Utiliza el script "**updateRepoInfo.py**", que a su vez llama al script "**updateTrashInfo.py**", para actualizar también la información de la papelera.
No hace falta que se le llame al crear o exportar una imagen, ya que lo llama el endpoint "**Crear archivos auxiliares**" (que sí debe ser llamado en esos casos).
tags:
- "Información de Imágenes"
responses:
"200":
description: "La actualización de la información de las imágenes se realizó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Repository info updated successfully"
"500 (Error)":
description: "Error al actualizar la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al actualizar la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/images:
get:
summary: "Obtener Información de todas las Imágenes"
description: |
Este endpoint ejecuta el script "**getRepoInfo.py**" con los parámetros "**all**" y "**none**" para devolver información de todas las imágenes almacenadas en el repositorio y en la papelera.
Devuelve detalles como el nombre de la imagen, tipo, nombre del cliente, clonador, compresor, sistema de archivos, tamaño de los datos, tamaño de la imagen, y hashes MD5.
tags:
- "Información de Imágenes"
responses:
"200":
description: "La información de las imágenes se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
properties:
REPOSITORY:
type: object
properties:
directory:
type: string
example: "/opt/opengnsys/images"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Ubuntu24"
type:
type: string
example: "img"
clientname:
type: string
example: "Ubuntu_24"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "EXTFS"
datasize:
type: integer
example: 9859634200000
size:
type: integer
example: 4505673214
sum:
type: string
example: "065a933c780ab1aaa044435ad5d4bf87"
fullsum:
type: string
example: "33575b9070e4a8043371b8c6ae52b80e"
ous:
type: array
items:
type: object
properties:
subdir:
type: string
example: "OU_subdir"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Ubuntu20"
type:
type: string
example: "img"
clientname:
type: string
example: "Ubuntu_20"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "EXTFS"
datasize:
type: integer
example: 8912896000000
size:
type: integer
example: 3803794535
sum:
type: string
example: "081a933c780ab1aaa044435ad5d4bf56"
fullsum:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
TRASH:
type: object
properties:
directory:
type: string
example: "/opt/opengnsys/images_trash"
images:
type: array
items:
type: object
ous:
type: array
items:
type: object
properties:
subdir:
type: string
example: "CentroVirtual"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Ubuntu20OLD"
type:
type: string
example: "img"
clientname:
type: string
example: "Ubuntu_20"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "EXTFS"
datasize:
type: integer
example: 8912896000000
size:
type: integer
example: 3803794535
sum:
type: string
example: "081a933c780ab1aaa044435ad5d4bf56"
fullsum:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
"500 (Error)":
description: "Error al consultar y/o devolver la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al consultar y/o devolver la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images/{imageId}:
get:
summary: "Obtener Información de una Imagen concreta"
description: |
Este endpoint devuelve información de la imagen especificada mediante su ID, en formato JSON.
Utiliza el script "**getRepoInfo.py**" que recibe como parámetros el nombre de la imagen con extensión y el subdirectorio correspondiente a la OU (o "none" si no es el caso).
La imagen puede estar en el archivo "**repoinfo.json**" (si está almacenada en el repositorio) o en "**trashinfo.json**" (si está en la papelera).
tags:
- "Información de Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum')"
responses:
"200":
description: "La información de la imagen se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
properties:
directory:
type: string
example: "/opt/opengnsys/images"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Windows10"
type:
type: string
example: "img"
clientname:
type: string
example: "Windows_10"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "NTFS"
datasize:
type: integer
example: 9859634200000
size:
type: integer
example: 4505673214
sum:
type: string
example: "065a933c780ab1aaa044435ad5d4bf87"
fullsum:
type: string
example: "33575b9070e4a8043371b8c6ae52b80e"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500 (Error)":
description: "Error al consultar y/o devolver la información de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al consultar y/o devolver la información de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/status/images/{imageId}:
get:
summary: "Chequear Integridad de Imagen"
description: |
Este endpoint comprueba la integridad de la imagen especificada como parámetro, comparando el tamaño y el hash MD5 del último MB con los valores almacenados en los archivos ".size" y ".sum".
Utiliza el script "**checkImage.py**", que recibe el nombre de la imagen (con extensión) y el subdirectorio correspondiente a la OU, si aplica.
tags:
- "Información de Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum')"
responses:
"200 (Check OK)":
description: "La imagen se ha chequeado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image file passed the Integrity Check correctly"
"200 (Check KO)":
description: "La imagen se ha chequeado exitosamente, pero no ha pasado el test de integridad."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image file didn't pass the Integrity Check"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found (inexistent or deleted)"
"500 (Error)":
description: "Error al chequear la integridad de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al chequear la integridad de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Eliminar y Recuperar Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images/{imageId}?method={method}:
delete:
summary: "Eliminar una Imagen"
description: |
Este endpoint elimina la imagen especificada como parámetro (y todos sus archivos asociados), moviéndolos a la papelera o eliminándolos permanentemente (dependiendo del parámetro "method").
Utiliza el script "**deleteImage.py**" que recibe el nombre de la imagen (con extensión y subdirectorio correspondiente a la OU, si aplica) como primer parámetro, y opcionalmente el parámetro "-p" (para eliminación permanente), que a su vez llama al script "**updateRepoInfo.py**", para actualizar la información del repositorio.
tags:
- "Eliminar y Recuperar Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum')"
- name: method
in: query
required: true
type: string
description: "Método de eliminación (puede ser 'trash', para enviar la imagen a la papelera, o 'permanent', para eliminarla definitivamente)"
responses:
"200":
description: "La imagen se eliminó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image deleted successfully"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found (inexistent or deleted)"
"500 (Error)":
description: "Error al eliminar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al eliminar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/trash/images:
post:
summary: "Recuperar una Imagen"
description: |
Este endpoint recupera la imagen especificada, moviéndola desde la papelera al repositorio de imágenes.
Utiliza el script "**recoverImage.py**", que recibe el nombre de la imagen (con extensión y subdirectorio correspondiente a la OU, si aplica), que a su vez llama al script "**updateRepoInfo.py**", para actualizar la información del repositorio.
tags:
- "Eliminar y Recuperar Imágenes"
parameters:
- name: JSON
in: body
required: true
description: |
* **ID_img** - Identificador de la imagen, correspondiente al contenido del archivo 'full.sum'
schema:
type: object
properties:
ID_img:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
responses:
"200":
description: "La imagen se recuperó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image recovered successfully"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found (inexistent or recovered previously)"
"500 (Error)":
description: "Error al recuperar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al recuperar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/trash/images/{imageId}:
delete:
summary: "Eliminar una Imagen de la Papelera"
description: |
Este endpoint elimina permanentemente la imagen especificada, desde la papelera.
Utiliza el script "**deleteTrashImage.py**", que recibe el nombre de la imagen (con extensión y subdirectorio correspondiente a la OU, si aplica), que a su vez llama al script "**updateTrashInfo.py**", para actualizar la información de la papelera.
tags:
- "Eliminar y Recuperar Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum')"
responses:
"200":
description: "La imagen se eliminó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image deleted successfully"
"400":
description: "No se ha encontrado la imagen especificada en la papelera."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found at trash"
"500 (Error)":
description: "Error al eliminar la imagen de la papelera."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al eliminar la imagen de la papelera."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Transferencia de Imágenes (UDPcast)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/udpcast:
post:
summary: "Enviar una Imagen mediante UDPcast"
description: |
Este endpoint envía la imagen especificada a través de UDPcast, utilizando el script "**sendFileMcast.py**".
Recibe la imagen y los parámetros de configuración de transferencia, que son usados para construir la cadena de parámetros que se envía al script.
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Transferencia de Imágenes (UDPcast)"
parameters:
- name: JSON
in: body
required: true
description: |
* **ID_img** - Identificador de la imagen, correspondiente al contenido del archivo 'full.sum'
* **port** - Puerto Multicast
* **method** - Modalidad half-duplex o full-duplex
* **ip** - IP Multicast
* **bitrate** - Velocidad de transmisión, en Mbps
* **nclients** - Número minimo de clientes
* **maxtime** - Tiempo máximo de espera
schema:
type: object
properties:
ID_img:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
port:
type: string
description: "Puerto Multicast a utilizar para la transmisión"
example: "9000"
method:
type: string
description: "Modalidad de transmisión (puede ser 'half' o 'full' para half-duplex o full-duplex)"
example: "full"
ip:
type: string
description: "IP Multicast a la que se enviará la imagen"
example: "239.194.17.2"
bitrate:
type: string
description: "Velocidad de transmisión en Mbps"
example: "70M"
nclients:
type: integer
description: "Número mínimo de clientes"
example: 20
maxtime:
type: integer
description: "Tiempo máximo de espera en segundos"
example: 120
responses:
"200":
description: "La imagen se está enviando mediante UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Sending image.."
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500 (Error)":
description: "Error al enviar la imagen mediante UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image send failed"
"500 (Exception)":
description: "Excepción inesperada al enviar la imagen mediante UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/udpcast:
get:
summary: "Ver Estado de Transmisiones UDPcast"
description: |
Este endpoint devuelve información sobre los procesos activos de "**udp-sender**" en formato JSON, permitiendo comprobar las transferencias UDPcast activas.
Utiliza el script "**getUDPcastInfo.py**" para obtener esta información.
tags:
- "Transferencia de Imágenes (UDPcast)"
responses:
"200":
description: "La información de las transmisiones UDPcast activas se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
additionalProperties:
type: object
properties:
image_id:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
image_name:
type: string
example: "Ubuntu20.img"
"400":
description: "No se han encontrado transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UDPCast active transmissions"
"500 (Error)":
description: "Error al comprobar las transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al comprobar las transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/udpcast/images/{imageId}:
delete:
summary: "Cancelar Transmisión UDPcast"
description: |
Este endpoint cancela la transmisión UDPcast activa de la imagen especificada, deteniendo el proceso "**udp-sender**" asociado.
Utiliza el script "**stopUDPcast.py**" para finalizar la transmisión.
tags:
- "Transferencia de Imágenes (UDPcast)"
parameters:
- name: imageId
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum')"
responses:
"200":
description: "La transmisión UDPcast se ha cancelado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image transmission canceled successfully"
"400 (Image not found)":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (No transmissions for image)":
description: "No hay transmisiones UDPcast activas para la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UDPCast active transmissions for specified image"
"500 (Error)":
description: "Error al cancelar la transmisión UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Check Exception)":
description: "Error al verificar las transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error checking UDPcast transmissions"
"500 (Finalize Exception)":
description: "Error inesperado al finalizar la transmisión UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error finalizing UDPcast transmission"
"500 (General Exception)":
description: "Excepción inesperada al cancelar la transmisión UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Transferencia de Imágenes (UFTP)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/uftp:
post:
summary: "Enviar una Imagen mediante UFTP"
description: |
Este endpoint envía una imagen especificada a través de UFTP, utilizando el script "**sendFileUFTP.py**".
Requiere que los clientes ogLive estén previamente en escucha con un daemon "UFTPD", ejecutando el script "**listenUFTPD.py**".
Recibe la imagen y los parámetros de configuración de transferencia, que son usados para construir la cadena de parámetros que se envía al script.
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Transferencia de Imágenes (UFTP)"
parameters:
- name: JSON
in: body
required: true
description: |
* **ID_img** - Identificador de la imagen, correspondiente al contenido del archivo 'full.sum'
* **port** - Puerto Multicast
* **ip** - IP Unicast/Multicast),
* **bitrate** - Velocidad de transmisión, con 'K' para Kbps, 'M' para Mbps o 'G' para Gbps
schema:
type: object
properties:
ID_img:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
port:
type: string
description: "Puerto para la transmisión UFTP"
example: "9000"
ip:
type: string
description: "IP Unicast o Multicast para la transmisión"
example: "239.194.17.2"
bitrate:
type: string
description: "Velocidad de transmisión (con 'K' para Kbps, 'M' para Mbps, o 'G' para Gbps)"
example: "1G"
responses:
"200":
description: "La imagen se está enviando mediante UFTP."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Sending image..."
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500 (Error)":
description: "Error al enviar la imagen mediante UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image send failed"
"500 (Exception)":
description: "Excepción inesperada al enviar la imagen mediante UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/uftp:
get:
summary: "Ver Estado de Transmisiones UFTP"
description: |
Este endpoint devuelve información sobre los procesos activos de "**uftp**" en formato JSON, permitiendo comprobar las transferencias UFTP activas.
Utiliza el script "**getUFTPInfo.py**" para obtener esta información.
tags:
- "Transferencia de Imágenes (UFTP)"
responses:
"200":
description: "La información de las transmisiones UFTP activas se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
additionalProperties:
type: object
properties:
image_id:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
image_name:
type: string
example: "Ubuntu20.img"
"400":
description: "No se han encontrado transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UFTP active transmissions"
"500 (Error)":
description: "Error al comprobar las transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al comprobar las transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/uftp/images/{imageId}:
delete:
summary: "Cancelar Transmisión UFTP"
description: |
Este endpoint cancela la transmisión UFTP activa de una imagen especificada, deteniendo el proceso "**uftp**" asociado.
Utiliza el script "**stopUFTP.py**" para finalizar la transmisión.
tags:
- "Transferencia de Imágenes (UFTP)"
parameters:
- name: imageId
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum')"
responses:
"200":
description: "La transmisión UFTP se ha cancelado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image transmission canceled successfully"
"400 (Image not found)":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (No transmissions for image)":
description: "No hay transmisiones UFTP activas para la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UFTP active transmissions for specified image"
"500 (Error)":
description: "Error al cancelar la transmisión UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Check Exception)":
description: "Error al verificar las transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error checking UFTP transmissions"
"500 (Finalize Exception)":
description: "Error inesperado al finalizar la transmisión UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error finalizing UFTP transmission"
"500 (General Exception)":
description: "Excepción inesperada al cancelar la transmisión UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Transferencia de Imágenes (P2P)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/p2p:
post:
summary: "Enviar una Imagen mediante P2P"
description: |
Este endpoint inicia el tracker y el seeder de torrents para enviar una imagen especificada mediante P2P.
Utiliza los scripts "**runTorrentTracker.py**" y "**runTorrentSeeder.py**" para iniciar el tracker y el seeder en el directorio de la imagen.
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Transferencia de Imágenes (P2P)"
parameters:
- name: JSON
in: body
required: true
description: |
* **ID_img** - Identificador de la imagen, correspondiente al contenido del archivo 'full.sum'
schema:
type: object
properties:
ID_img:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
responses:
"200":
description: "La imagen se está enviando mediante P2P."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Tracker and Seeder serving image correctly"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500":
description: "Error al enviar la imagen mediante P2P."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Tracker or Seeder (or both) not running"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/p2p:
delete:
summary: "Cancelar Transmisiones P2P"
description: |
Este endpoint cancela todas las transmisiones P2P activas, finalizando los procesos "**bttrack**" (tracker) y "**btlaunchmany.bittornado**" (seeder).
Utiliza el script "**stopP2P.py**" para detener las transmisiones P2P activas en el servidor.
tags:
- "Transferencia de Imágenes (P2P)"
responses:
"200":
description: "Las transmisiones P2P se han cancelado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "P2P transmissions canceled successfully"
"500 (Error)":
description: "Error al cancelar las transmisiones P2P."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al cancelar las transmisiones P2P."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Importar y Exportar Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/repo/images:
post:
summary: "Importar una Imagen"
description: |
Este endpoint importa la imagen especificada desde un servidor remoto al servidor local.
Utiliza el script "**importImage.py**", que recibe como parámetros el nombre de la imagen, la IP o hostname del servidor remoto, el usuario para la conexión, y el subdirectorio correspondiente a la OU (si aplica),
que a su vez llama al script "**updateRepoInfo.py**", para actualizar la información del repositorio.
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está importando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Importar y Exportar Imágenes"
parameters:
- name: JSON
in: body
required: true
description: |
* **image** - Nombre de la imagen, con extensión
* **ou_subdir** - Subdirectorio correspondiente a la OU, o 'none' si no procede
* **repo_ip** - Dirección IP del servidor remoto
* **user** - Usuario con el que conectar al servidor remoto
schema:
type: object
properties:
image:
type: string
example: "Windows10.img"
ou_subdir:
type: string
description: "Subdirectorio correspondiente a la OU (o 'none' si no es el caso)"
example: "none"
repo_ip:
type: string
description: "Dirección IP del repositorio remoto"
example: "192.168.56.100"
user:
type: string
description: "Usuario para acceder al repositorio remoto"
example: "user_name"
responses:
"200":
description: "La imagen se está importando."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Importing image..."
"400 (Connection fail)":
description: "Error de conexión con el servidor remoto."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Can't connect to remote server"
"400 (Image not found)":
description: "No se ha encontrado la imagen remota."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Remote image not found"
"400 (Image locked)":
description: "La imagen remota está bloqueada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Remote image is locked"
"500":
description: "Error al importar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image import failed"
"500 (Error)":
description: "Error al importar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al importar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/repo/images:
put:
summary: "Exportar una Imagen"
description: |
Este endpoint exporta la imagen especificada desde el servidor local a un servidor remoto.
Utiliza el script "**exportImage.py**", que recibe como parámetros el nombre de la imagen, la IP o hostname del servidor remoto, el usuario para la conexión, y el subdirectorio correspondiente a la OU (si aplica).
Una vez que acabe, debe llamarse al endpoint "**Actualizar Información del Repositorio**" en el ogRepository destino de la exportación, para actualizar la información del repositorio.
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está exportando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Importar y Exportar Imágenes"
parameters:
- name: JSON
in: body
required: true
description: |
* **ID_img** - Identificador de la imagen, correspondiente al contenido del archivo 'full.sum'
* **repo_ip** - Dirección IP del servidor remoto
* **user** - Usuario con el que conectar al servidor remoto
schema:
type: object
properties:
ID_img:
type: string
example: "image_id"
repo_ip:
type: string
description: "Dirección IP del repositorio remoto"
example: "192.168.56.100"
user:
type: string
description: "Usuario para acceder al repositorio remoto"
example: "user_name"
responses:
"200":
description: "La imagen se está exportando."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Exporting image..."
"400 (Image not found)":
description: "No se ha encontrado la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (Image locked)":
description: "La imagen está bloqueada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image is locked"
"400 (Connection fail)":
description: "Error de conexión con el servidor remoto."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Can't connect to remote server"
"400 (Image present)":
description: "La imagen ya existe en el servidor remoto."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image already exists on remote server"
"500":
description: "Error al exportar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Export image failed"
"500 (Error)":
description: "Error al exportar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al exportar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Varios"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images/torrentsum:
post:
summary: "Crear archivos auxiliares"
description: |
Este endpoint crea los archivos "**size**", "**sum**", "**full.sum**" y "**torrent**" para la imagen especificada.
Utiliza el script "**createTorrentSum.py**", que recibe como parámetro el nombre de la imagen (con subdirectorio de OU, si aplica), que a su vez llama al script "**updateRepoInfo.py**, para actualizar la información del repositorio".
Debe ser llamado cada vez que se cree una imagen desde un ogLive, y cada vez que se llame al endpoint "**Exportar una Imagen**" (en este último caso, debe ejecutarse en el ogRepository destino de la exportación).
**NOTA**: Este endpoint es asíncrono, ya que puede tardar cierto tiempo, por lo que solo informa de que se están creando los archivos auxiliares, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Varios"
parameters:
- name: JSON
in: body
required: true
description: |
* **image** - Nombre de la imagen, con extensión
* **ou_subdir** - Subdirectorio correspondiente a la OU, o 'none' si no procede
schema:
type: object
properties:
image:
type: string
example: "Windows10.img"
ou_subdir:
type: string
description: "Subdirectorio correspondiente a la OU (o 'none' si no es el caso)"
example: "none"
responses:
"200":
description: "Los archivos auxiliares se están creando."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Creating auxiliar files..."
"400 (Image not found)":
description: "No se ha encontrado la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (Image locked)":
description: "La imagen está bloqueada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image is locked"
"500 (Error)":
description: "Error al crear los archivos auxiliares."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al crear los archivos auxiliares."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/wol:
post:
summary: "Enviar paquete Wake On Lan"
description: |
Este endpoint envía un paquete mágico Wake On Lan (**WOL**) a la dirección MAC especificada, a través de la IP de broadcast especificada.
Utiliza el script "**sendWakeOnLan.py**", que recibe como parámetros la IP de broadcast y la dirección MAC del equipo a encender.
tags:
- "Varios"
parameters:
- name: JSON
in: body
required: true
description: |
* **broadcast_ip** - IP de broadcast a la que se enviará el paquete WOL, que puede ser '255.255.255.255' o la IP de broadcast de una subred
* **mac** - Dirección MAC del equipo que se desea encender via Wake On Lan
schema:
type: object
properties:
broadcast_ip:
type: string
example: "255.255.255.255"
mac:
type: string
example: "00:19:99:5c:bb:bb"
responses:
"200":
description: "El paquete Wake On Lan se ha enviado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Wake On Lan packet sent successfully"
"500 (Error)":
description: "Error al enviar el paquete Wake On Lan."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al enviar el paquete Wake On Lan."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------