Fixes for running under gunicorn
parent
1d1f2caab8
commit
bbdfed4cc6
|
@ -3,6 +3,7 @@ import os
|
|||
import sys
|
||||
|
||||
sys.path.insert(0, "/usr/share/opengnsys-modules/python3/dist-packages")
|
||||
sys.path.insert(0, "/opt/opengnsys/oggit/bin/")
|
||||
|
||||
|
||||
import importlib
|
||||
|
@ -17,6 +18,13 @@ from flasgger import Swagger
|
|||
from werkzeug.exceptions import HTTPException
|
||||
from systemd.journal import JournalHandler
|
||||
|
||||
class FakeArgs:
|
||||
def __init__(self):
|
||||
self.verbose = False
|
||||
self.listen = None
|
||||
self.port = None
|
||||
self.debug = None
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="api_server.py",
|
||||
|
@ -26,15 +34,20 @@ parser = argparse.ArgumentParser(
|
|||
debug_enabled = False
|
||||
listen_host = '0.0.0.0'
|
||||
listen_port = 8006
|
||||
parser.add_argument('--debug', action='store_true', help="Enable debug output")
|
||||
parser.add_argument('--listen', metavar="HOST", help="Listen address")
|
||||
parser.add_argument('--port', metavar="PORT", help="Listen port")
|
||||
|
||||
is_gunicorn = "gunicorn" in os.environ.get("SERVER_SOFTWARE", "")
|
||||
|
||||
parser.add_argument("-v", "--verbose", action="store_true", help = "Verbose console output")
|
||||
|
||||
args = parser.parse_args()
|
||||
if not is_gunicorn:
|
||||
# Gunicorn passes us all the arguments passed to gunicorn itself, which of course crashes here since we don't recognize them.
|
||||
# Deal with this by not doing argument handling when running under gunicorn
|
||||
parser.add_argument('--debug', action='store_true', help="Enable debug output")
|
||||
parser.add_argument('--listen', metavar="HOST", help="Listen address")
|
||||
parser.add_argument('--port', metavar="PORT", help="Listen port")
|
||||
parser.add_argument("-v", "--verbose", action="store_true", help = "Verbose console output")
|
||||
|
||||
args = parser.parse_args()
|
||||
else:
|
||||
args = FakeArgs()
|
||||
|
||||
|
||||
log = logging.getLogger('api_server')
|
||||
|
@ -46,6 +59,10 @@ if args.verbose:
|
|||
else:
|
||||
log.setLevel(logging.INFO)
|
||||
|
||||
|
||||
if is_gunicorn:
|
||||
log.info("Running under gunicorn, argument handling disabled.")
|
||||
|
||||
if args.listen:
|
||||
listen_host = args.listen
|
||||
|
||||
|
@ -105,7 +122,8 @@ for filename in os.listdir(blueprints_dir):
|
|||
with open(swagger_file, "r", encoding='utf-8') as file:
|
||||
swagger_template = yaml.safe_load(file)
|
||||
|
||||
swagger = Swagger(app, template=swagger_template)
|
||||
#print(f"Template: {swagger_template}")
|
||||
#swagger = Swagger(app, template=swagger_template)
|
||||
else:
|
||||
log.warning("Swagger not found for this module, looked in %s", swagger_file)
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
---
|
||||
swagger: "2.0"
|
||||
info:
|
||||
title: "ogRepository API"
|
||||
version: "1.0"
|
||||
description: |
|
||||
---
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
# Esto hace que el Swagger se ordene por los tags (apartados), de la forma especificada:
|
||||
|
@ -30,7 +31,7 @@ paths:
|
|||
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, e instalación de ogGit.
|
||||
incluyendo información sobre la CPU, memoria RAM, disco duro, servicios, y procesos específicos de ogRepository, e instalación de ogGit.
|
||||
tags:
|
||||
- "Estado de ogRepository"
|
||||
responses:
|
||||
|
@ -140,14 +141,14 @@ paths:
|
|||
# -----------------------------------------------------------------------------------------------------------
|
||||
# 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"
|
||||
|
@ -192,7 +193,7 @@ paths:
|
|||
get:
|
||||
summary: "Obtener Información de todas las Imágenes"
|
||||
description: |
|
||||
Este endpoint ejecuta el script "**getRepoInfo.py**" con el parámetro "**all**", para devolver información de todas las imágenes almacenadas en el repositorio y en la papelera, que a su vez llama al script "**updateRepoInfo.py**", para actualizar previamente la información del repositorio.
|
||||
Este endpoint ejecuta el script "**getRepoInfo.py**" con el parámetro "**all**", para devolver información de todas las imágenes almacenadas en el repositorio y en la papelera, que a su vez llama al script "**updateRepoInfo.py**", para actualizar previamente la información del repositorio.
|
||||
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"
|
||||
|
@ -1257,7 +1258,7 @@ paths:
|
|||
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
#/ogrepository/v1/p2p:
|
||||
#/ogrepository/v1/p2p:
|
||||
delete:
|
||||
summary: "Cancelar Transmisiones P2P"
|
||||
description: |
|
||||
|
@ -1311,10 +1312,10 @@ paths:
|
|||
Este endpoint importa la imagen especificada desde un repositorio remoto al repositorio local (en el que se ejecuta el endpoint).
|
||||
Utiliza el script "**importImage.py**", que recibe como parámetros el nombre de la imagen, la IP o hostname del servidor remoto, y el usuario con el que conectar al servidor remoto.
|
||||
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:
|
||||
- "Transferencia entre Repositorios y Backup"
|
||||
- "Transferencia entre Repositorios y Backup"
|
||||
parameters:
|
||||
- name: JSON
|
||||
in: body
|
||||
|
@ -1436,7 +1437,7 @@ paths:
|
|||
* **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
|
||||
* **remote_path** - Ruta remota en la que copiar la imagen
|
||||
* **remote_path** - Ruta remota en la que copiar la imagen
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -1457,7 +1458,7 @@ paths:
|
|||
example: "/home/opengnsys"
|
||||
responses:
|
||||
"200":
|
||||
description: "Se está haciendo backup de la imagen."
|
||||
description: "Se está haciendo backup de la imagen."
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -1532,20 +1533,20 @@ paths:
|
|||
post:
|
||||
summary: "Convertir Imagen Virtual a Imagen OpenGnsys"
|
||||
description: |
|
||||
Este endpoint convierte la imagen virtual especificada como primer parámetro en una imagen "img" como las que se generan desde OpenGnsys, debiendo haberse copiado previamente en la ruta "opt/opengnsys/ogrepository/images_virtual".
|
||||
Utiliza el script "**convertVMtoIMG.py**", que recibe como parámetros el nombre de la imagen virtual, y el sistema de archivos de la partición a clonar (en formato "blkid").
|
||||
Se puede comprobar todos los sistemas de archivos aceptados por "blkid" ejecutando el comando "blkid -k".
|
||||
|
||||
Este endpoint convierte la imagen virtual especificada como primer parámetro en una imagen "img" como las que se generan desde OpenGnsys, debiendo haberse copiado previamente en la ruta "opt/opengnsys/ogrepository/images_virtual".
|
||||
Utiliza el script "**convertVMtoIMG.py**", que recibe como parámetros el nombre de la imagen virtual, y el sistema de archivos de la partición a clonar (en formato "blkid").
|
||||
Se puede comprobar todos los sistemas de archivos aceptados por "blkid" ejecutando el comando "blkid -k".
|
||||
|
||||
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen virtual se está convirtiendo, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
|
||||
tags:
|
||||
- "Importar y Exportar Máquinas Virtuales"
|
||||
- "Importar y Exportar Máquinas Virtuales"
|
||||
parameters:
|
||||
- name: JSON
|
||||
in: body
|
||||
required: true
|
||||
description: |
|
||||
* **virtual_image** - Nombre de la imagen virtual, con extensión
|
||||
* **filesystem** - Sistema de archivos de la partición a clonar, en formato "blkid"
|
||||
* **virtual_image** - Nombre de la imagen virtual, con extensión
|
||||
* **filesystem** - Sistema de archivos de la partición a clonar, en formato "blkid"
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -1640,19 +1641,19 @@ paths:
|
|||
put:
|
||||
summary: "Convertir Imagen OpenGnsys a Imagen Virtual"
|
||||
description: |
|
||||
Este endpoint convierte la imagen "img" especificada como primer parámetro en una imagen virtual con la extensión especificada como segundo parámetro ("vdi", "vmdk", etc), guardándola en la ruta "opt/opengnsys/ogrepository/images_virtual/export".
|
||||
Utiliza el script "**convertIMGtoVM.py**", que recibe como parámetros el nombre de la imagen, y la extensión del disco virtual destino ("vdi", "vmdk", etc).
|
||||
|
||||
Este endpoint convierte la imagen "img" especificada como primer parámetro en una imagen virtual con la extensión especificada como segundo parámetro ("vdi", "vmdk", etc), guardándola en la ruta "opt/opengnsys/ogrepository/images_virtual/export".
|
||||
Utiliza el script "**convertIMGtoVM.py**", que recibe como parámetros el nombre de la imagen, y la extensión del disco virtual destino ("vdi", "vmdk", etc).
|
||||
|
||||
**NOTA**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está convirtiendo a virtual, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
|
||||
tags:
|
||||
- "Importar y Exportar Máquinas Virtuales"
|
||||
- "Importar y Exportar Máquinas Virtuales"
|
||||
parameters:
|
||||
- name: JSON
|
||||
in: body
|
||||
required: true
|
||||
description: |
|
||||
* **ID_img** - Identificador de la imagen, correspondiente al contenido del archivo 'full.sum'
|
||||
* **vm_extension** - Extensión del disco virtual destino ("vdi", "vmdk", etc)
|
||||
* **vm_extension** - Extensión del disco virtual destino ("vdi", "vmdk", etc)
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
|
|
|
@ -30,4 +30,4 @@ fi
|
|||
|
||||
|
||||
apt update
|
||||
apt install -y python3-git opengnsys-libarchive-c python3-termcolor python3-requests python3-tqdm bsdextrautils python3-paramiko python3-aniso8601 opengnsys-flask-restx opengnsys-flask-executor python3-flask
|
||||
apt install -y python3-git opengnsys-libarchive-c python3-termcolor python3-requests python3-tqdm bsdextrautils python3-paramiko python3-aniso8601 opengnsys-flask-restx opengnsys-flask-executor python3-flask python3-psutil
|
||||
|
|
Loading…
Reference in New Issue