## Diseño de la Lógica y Comunicación entre los Endpoints del Componente `ogboot` y el Servidor `ogCore` ### Introducción El componente `ogboot` se encarga de la gestión y configuración de archivos de arranque (iPXE) y plantillas en un entorno de despliegue de imágenes. El servidor `ogCore` es el núcleo que interactúa con `ogboot` para realizar operaciones de administración y configuración. Este documento describe la lógica y la comunicación entre los endpoints del componente `ogboot` y el servidor `ogCore`. ### Endpoints del Componente `ogboot` #### Endpoints del Recurso `oglive` 1. **Ver todos los ogLives instalados** - **URL**: `/ogboot/v1/oglives` - **Método HTTP**: GET - **Descripción**: Obtiene información sobre todos los ogLives instalados. - **Respuesta**: ```json [ "ogLive-5.0.0-r20190605", "ogLive-5.11.0-r20210413", "ogLive-5.13.0-27-r20210706" ] ``` 2. **Obtener Información de un ogLive** - **URL**: `/ogboot/v1/oglives/{uuid}` - **Método HTTP**: GET - **Descripción**: Obtiene información sobre un cliente ogLive instalado utilizando su nombre. - **Parámetros**: - `uuid` (string): uuid del ogLive. - **Respuesta**: ```json { "distribution": "uuid", "distribution": "focal", "kernel": "5.13.0-27", "architecture": "amd64", "revision": "r20210706.5b4bf5f", "directory": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f", "iso": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso" } ``` - **Respuestas**: - **200 OK**: Información del ogLive obtenida exitosamente. - **404 Not Found**: ogLive no encontrado. 3. **Obtener Información del ogLive Predeterminado** - **URL**: `/ogboot/v1/oglives/default` - **Método HTTP**: GET - **Descripción**: Obtiene información sobre el cliente ogLive predeterminado. - **Ejemplo de Solicitud**: ```bash curl -X GET -H "Authorization: $API_KEY" http://example.com/ogboot/v1/oglives/default ``` - **Respuesta**: ```json { "distribution": "focal", "kernel": "5.13.0-27", "architecture": "amd64", "revision": "r20210706.5b4bf5f", "directory": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f", "iso": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso" } ``` - **Respuestas**: - **200 OK**: Información del ogLive predeterminado obtenida exitosamente. - **500 Internal Server Error**: Error al obtener la información del ogLive predeterminado. 4. **Establecer ogLive Predeterminado** - **URL**: `/ogboot/v1/oglives/default/{uuid}` - **Método HTTP**: POST - **Descripción**: Establece un cliente ogLive como predeterminado utilizando su nombre. - **Parámetros**: - `uuid` (string): uuid del ogLive a establecer como predeterminado. - **Respuestas**: - **200 OK**: ogLive establecido como predeterminado exitosamente. - **404 Not Found**: ogLive no encontrado. - **500 Internal Server Error**: Error al establecer el ogLive como predeterminado. 5. **Ver la lista de ogLives disponibles para descargar** - **URL**: `/ogboot/v1/oglives/isos` - **Método HTTP**: GET - **Respuesta**: ```json [ { "id": "1", "filename": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso", "installed": false, "compatible": true }, { "id": "2", "filename": "ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso", "installed": false, "compatible": true }, { "id": "3", "filename": "ogLive-focal-5.8.0-50-generic-amd64-r20210413.992ebb9.iso", "installed": false, "compatible": true }, { "id": "4", "filename": "ogLive-bionic-5.4.0-40-generic-amd64-r20200629.85eceaf.iso", "installed": false, "compatible": true }, ] ``` - **500 Internal Server Error**: Error en la conexión. 6. **Crear un ogLive** - **URL**: `/ogboot/v1/oglives` - **Método HTTP**: POST - **Descripción**: Crea un nuevo ogLive utilizando el nombre del ISO proporcionado. - **Cuerpo de la Solicitud**: ```json { "isoName": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso" } ``` - **Ejemplo de Solicitud**: ```bash curl -X POST -H "Authorization: $API_KEY" -d '{"isoName": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso"}' http://example.com/ogboot/v1/oglives ``` - **Respuestas**: - **200 OK**: ogLive creado exitosamente. - **400 Bad Request**: Error en los datos proporcionados. - **500 Internal Server Error**: Error al crear el ogLive. 7. **Eliminar un ogLive** - **URL**: `/ogboot/v1/oglives/{uuid}` - **Método HTTP**: DELETE - **Descripción**: Elimina un ogLive específico utilizando su nombre. - **Parámetros**: - `name` (string): Nombre del ogLive. - **Respuestas**: - **200 OK**: ogLive eliminado exitosamente. - **404 Not Found**: ogLive no encontrado. - **500 Internal Server Error**: Error al eliminar el ogLive. #### Endpoints del Recurso `pxe` y `pxe-template` 1. **Obtener Todos los Archivos de Arranque** - **URL**: `/ogboot/v1/pxes` - **Método HTTP**: GET - **Descripción**: Obtiene una lista de todos los archivos de arranque disponibles. - **Respuesta**: Lista de archivos de arranque en formato JSON. 2. **Obtener Configuración de Arranque** - **URL**: `/ogboot/v1/pxes/{mac}` - **Método HTTP**: GET - **Descripción**: Obtiene el contenido del archivo de configuración de arranque específico para un cliente utilizando su dirección MAC. - **Respuesta**: Archivo de arranque en formato adecuado. ```json { "template_name": "pxe", "mac": "00:50:56:22:11:12", "lang": "es_ES.UTF-8", "ip": "192.168.2.11", "server_ip": "192.168.2.1", "router": "192.168.2.1", "netmask": "255.255.255.0", "computer_name": "pc11", "netiface": "eth0", "group": "Aula_virtual", "ogrepo": "192.168.2.1", "oglive": "192.168.2.1", "oglog": "192.168.2.1", "ogshare": "192.168.2.1", "oglivedir": "ogLive", "ogprof": "false", "hardprofile": "", "ogntp": "", "ogdns": "", "ogproxy": "", "ogunit": "", "resolution": "788" } ``` 3. **Crear Archivo de Arranque** - **URL**: `/ogboot/v1/pxes` - **Método HTTP**: POST - **Descripción**: Crea un nuevo archivo de arranque utilizando los parámetros proporcionados. - **Cuerpo de la Solicitud**: ```json { "template_name": "pxe", "mac": "00:50:56:22:11:12", "lang": "es_ES.UTF-8", "ip": "192.168.2.11", "server_ip": "192.168.2.1", "router": "192.168.2.1", "netmask": "255.255.255.0", "computer_name": "pc11", "netiface": "eth0", "group": "Aula_virtual", "ogrepo": "192.168.2.1", "oglive": "192.168.2.1", "oglog": "192.168.2.1", "ogshare": "192.168.2.1", "oglivedir": "ogLive", "ogprof": "false", "hardprofile": "", "ogntp": "", "ogdns": "", "ogproxy": "", "ogunit": "", "resolution": "788" } ``` - **Respuesta**: Mensaje de éxito o error. 4. **Eliminar Archivo de Arranque** - **URL**: `/ogboot/v1/pxes/{name}` - **Método HTTP**: DELETE - **Descripción**: Elimina un archivo de arranque específico utilizando su dirección MAC. - **Respuesta**: Mensaje de éxito o error. 5. **Obtener Todas las Plantillas de Arranque** - **URL**: `/ogboot/v1/pxe-templates` - **Método HTTP**: GET - **Descripción**: Obtiene una lista de todas las plantillas de arranque disponibles. - **Respuesta**: Lista de plantillas en formato JSON. ```json { "templates": [ "pxe", "pxe2", "pxe_default" ] } ``` 6. **Obtener Contenido de una Plantilla** - **URL**: `/ogboot/v1/pxe-templates/{name}` - **Método HTTP**: GET - **Descripción**: Obtiene el contenido de una plantilla de arranque específica utilizando su nombre. - **Respuesta**: Contenido de la plantilla en formato adecuado. 7. **Crear Plantilla de Arranque** - **URL**: `/ogboot/v1/pxe-templates` - **Método HTTP**: POST - **Descripción**: Crea una nueva plantilla de arranque utilizando los datos proporcionados. - **Cuerpo de la Solicitud**: ```json { "name_template": "pxe", "content_template": "contenido_de_la_plantilla" } ``` - **Respuesta**: Mensaje de éxito o error. 8. **Eliminar Plantilla de Arranque** - **URL**: `/ogboot/v1/pxe-templates/{name}` - **Método HTTP**: DELETE - **Descripción**: Elimina una plantilla de arranque específica utilizando su nombre. - **Respuesta**: Mensaje de éxito o error. ## Flujos de Trabajo Para los nuevos flujos de trabajo, asumimos que habrá al menos una nueva tabla en ogCore para almacenar la información de los ogLives y su estado. Esta tabla permitirá a ogCore gestionar y sincronizar la información con ogBoot. ### Propuesta de definición de la tabla `ogLive` | Atributo | Tipo de Dato | Descripción | |----------------|----------------|-----------------------------------------------------------------| | `id` | `SERIAL` | Identificador del ogLive que corresponde a su suma de comprobación | | `distribution` | `VARCHAR(50)` | Nombre de la distribución del ogLive (por ejemplo, "focal"). | | `kernel` | `VARCHAR(100)` | Versión del kernel del ogLive. | | `architecture` | `VARCHAR(10)` | Arquitectura del ogLive (por ejemplo, "amd64"). | | `revision` | `VARCHAR(50)` | Revisión del ogLive (por ejemplo, "r20210706"). | | `directory` | `VARCHAR(100)` | Nombre del directorio del ogLive en el sistema de archivos. | | `iso` | `VARCHAR(255)` | Nombre del archivo ISO del ogLive. | | `is_default` | `BOOLEAN` | Indica si el ogLive es el predeterminado (`true` o `false`). | ### Ejemplo de Registro | `id` | `distribution` | `kernel` | `architecture` | `revision` | `directory` | `iso` | `is_default` | |------|----------------|---------------------|----------------|-------------|--------------------------|-------------------------------------------------------|--------------| | 1 | focal | 5.13.0-27-beta | amd64 | r20210706 | ogLive-5.13.0-r20210706 | ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso | true | ### Flujo de trabajo para instalar un `ogLive` #### 1. Consultar los `ogLives` Instalados - **Descripción**: Obtener la lista de `ogLives` que están actualmente instalados en el sistema. - **Interacción en la Web**: - El usuario navega a la sección de `ogLives` en el panel de administración. - Hace clic en "Ver `ogLives` instalados". - El sistema realiza una llamada a la API para obtener la lista de `ogLives` instalados. **Realización**: Puede realizarse directamente desde **`ogCore`** mediante una consulta a la base de datos `oglives`. **Consulta SQL**: ```sql SELECT * FROM oglives; ``` **Endpoint**: - **`ogBoot`**: `/ogboot/v1/oglives` - **Método**: `GET` #### 2. Consultar los `ogLives` disponibles para descargar - **Descripción**: Obtener una lista de `ogLives` disponibles para descargar desde el servidor. - **Interacción en la Web**: - El usuario selecciona "Descargar nuevos `ogLives`" en la interfaz. - Aparece una lista de `ogLives` disponibles, obtenida mediante una consulta al servidor. **Realización**: Necesita comunicación con **`ogBoot`**. Nota: Este proceso requiere de una consulta a Trac (o web) que se podría llevar a cabo desde el ogCore. **Endpoint**: - **`ogBoot`**: `/ogboot/v1/isos` - **Método**: `GET` #### 3. Instalar un `ogLive` - **Descripción**: Instalar un `ogLive` seleccionado en el sistema. - **Interacción en la Web**: - El usuario selecciona un `ogLive` de la lista de disponibles y hace clic en "Instalar". - El sistema muestra un cuadro de confirmación, y al confirmar, se inicia el proceso de instalación. **Realización**: Requiere comunicación con **`ogBoot`** para iniciar la instalación. Primero, se construye el JSON con los parámetros necesarios. La inserción en la base de datos `ogCore` solo se realiza después de que la instalación en `ogBoot` sea confirmada como exitosa. - **Proceso de Instalación**: 1. **Generación de JSON**: `ogCore` genera un JSON con los detalles del `ogLive`, incluyendo un UUID temporal. 2. **Solicitud de Instalación**: - **Endpoint**: `/ogboot/v1/oglives` - **Método**: `POST` - **Cuerpo de la Solicitud**: ```json { "uuid": "550e8400-e29b-41d4-a716-446655440000", "directory": "ogLive-5.11.0-r20210413", "distribution": "focal", "kernel": "5.11.0-22-generic", "architecture": "amd64", "revision": "r20210413", "iso": "ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso" } ``` 3. **Validación de Instalación**: `ogBoot` intenta instalar el `ogLive` y devuelve un estado de éxito o fallo. 4. **Actualización de Base de Datos**: - **Instalación Exitosa**: Si `ogBoot` confirma el éxito, `ogCore` inserta el nuevo `ogLive` en la base de datos: ```sql INSERT INTO oglives (uuid, distribution, kernel, architecture, revision, directory, iso, is_default) VALUES ('550e8400-e29b-41d4-a716-446655440000', 'focal', '5.11.0-22-generic', 'amd64', 'r20210413', 'ogLive-5.11.0-r20210413', 'ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso', false); ``` - **Instalación Fallida**: Si `ogBoot` reporta un fallo, no se realiza ninguna inserción y se maneja el error adecuadamente en la interfaz de usuario. #### 4. Revisar un `ogLive` Instalado - **Descripción**: Obtener detalles sobre un `ogLive` específico que está instalado. - **Interacción en la Web**: - El usuario selecciona un `ogLive` de la lista de instalados para ver detalles. - Se muestra la información detallada del `ogLive` seleccionado. **Realización**: Puede realizarse desde **`ogCore`** mediante una consulta a la base de datos `oglives`. **Consulta SQL**: ```sql SELECT * FROM oglives WHERE directory = 'ogLive-5.13.0-r20210706'; ``` ### Flujo de trabajo para cambiar el `oglive` por defecto #### 1. Consultar los `ogLives` Instalados - **Descripción**: Obtener la lista de `ogLives` que están actualmente instalados en el sistema. - **Interacción en la Web**: - El usuario navega a la sección de `ogLives` en el panel de administración. - Hace clic en "Ver `ogLives` instalados". - El sistema realiza una llamada a la API para obtener la lista de `ogLives` instalados. **Realización**: Puede realizarse directamente desde **`ogCore`** mediante una consulta a la base de datos `oglives`. Lo ideal sería hacerlo hacia **`ogBoot`** ya que tiene la fuente de información fidedigna del estado de los `ogLives` en el componente. **Consulta SQL**: ```sql SELECT * FROM oglives; ``` **Endpoint**: - **`ogBoot`**: `/ogboot/v1/oglives` - **Método**: `GET` #### 2. Ver el `ogLive` por Defecto - **Descripción**: Obtener el `ogLive` que está configurado como predeterminado. - **Interacción en la Web**: - El usuario navega a la sección de configuración de `ogLives` en el panel de administración. - Hace clic en en el `ogLive` que está marcado por defecto. - El sistema realiza una consulta a la base de datos para obtener el `ogLive` predeterminado. **Realización**: Puede realizarse desde **`ogCore`** mediante una consulta a la base de datos `oglives`. **Consulta SQL**: ```sql SELECT * FROM oglives WHERE directory = 'ogLive-5.13.0-r20210706'; ``` #### 3. Asignar `ogLive` por Defecto - **Descripción**: Configurar un `ogLive` instalado como el predeterminado. - **Interacción en la Web**: - El usuario selecciona un `ogLive` de la lista de instalados. - Hace clic en "Configurar como `ogLive` por defecto". - Tras la confirmación, el sistema envía una solicitud para actualizar el `ogLive` por defecto. - El sistema actualiza la base de datos y comunica el cambio a `ogBoot`. **Realización**: Requiere comunicación con **`ogBoot`** para modificar el `ogLive` por defecto en el TFTP boot del **`ogBoot`**. **Consulta SQL**: ```sql SELECT * FROM oglives WHERE directory = 'ogLive-5.13.0-r20210706'; ``` **Endpoint**: - **`ogBoot`**: `/ogboot/v1/oglives/default/550e8400-e29b-41d4-a716-446655440000` - **Método**: `POST` **Actualizar Base de Datos**: - Tras la actualización en `ogBoot`, se debe actualizar la base de datos para reflejar el nuevo `ogLive` por defecto: ```sql UPDATE oglives SET is_default = false WHERE is_default = true; UPDATE oglives SET is_default = true WHERE uuid = '550e8400-e29b-41d4-a716-446655440000'; ``` ### Flujo de trabajo para desinstalar un `ogLive` #### 1. Consultar los `ogLives` Instalados - **Descripción**: Obtener la lista de `ogLives` que están actualmente instalados en el sistema. - **Interacción en la Web**: - El usuario navega a la sección de `ogLives` en el panel de administración. - Hace clic en "Ver `ogLives` instalados". - El sistema realiza una llamada a la API para obtener la lista de `ogLives` instalados. **Realización**: Puede realizarse directamente desde **`ogCore`** mediante una consulta a la base de datos `oglives`. **Consulta SQL**: ```sql SELECT * FROM oglives; ``` **Endpoint**: - **`ogBoot`**: `/ogboot/v1/oglives` - **Método**: `GET` #### 2. Desinstalar `ogLive` - **Descripción**: Iniciar el proceso de desinstalación del `ogLive` seleccionado en `ogBoot`. - **Interacción en la Web**: - En la lista de `ogLives` instalados, el usuario elige el `ogLive` a desinstalar. - Hace clic en el botón "Desinstalar" junto al `ogLive` seleccionado. - El sistema muestra un cuadro de confirmación preguntando si el usuario está seguro de desinstalar el `ogLive`. - El usuario hace clic en "Confirmar" para proceder. - El sistema envía una solicitud a `ogBoot` para desinstalar el `ogLive`. **Realización**: - **Endpoint**: `/ogboot/v1/oglives/550e8400-e29b-41d4-a716-446655440000` - **Método**: `DELETE` - **Validación de Instalación**: `ogBoot` intenta desinstalar el `ogLive` y devuelve un estado de éxito o fallo. - **Actualización de Base de Datos**: - **Desinstalación Exitosa**: Si `ogBoot` confirma el éxito, `ogCore` elimina el `ogLive` en la base de datos: ```sql DELETE FROM oglives WHERE uuid = '550e8400-e29b-41d4-a716-446655440000'; ``` - **Instalación Fallida**: Si `ogBoot` reporta un fallo, no se realiza ningún borrado y se maneja el error adecuadamente en la interfaz de usuario. ### Flujo de trabajo para corregir las incongruencias entre `ogCore` y `ogBoot` #### 8. Revisar estado de ogboot - **Descripción**: Comparar el estado actual de `ogboot` con la base de datos de `ogCore`, generando un informe de discrepancias. - **Realización**: Requiere comunicación con **`ogBoot`** para obtener el estado actual de los `ogLives` instalados, el `ogLive` por defecto, y las plantillas de arranque (`pxes`). Luego, `ogCore` compara estos datos con su base de datos y devuelve un informe de discrepancias. **Endpoint**: - **`ogBoot`**: `/ogboot/v1/oglive/status` - **Método**: `GET` - **Resultado de la Solicitud**: ```json { "installed_oglives": [ { "name": "ogLive-5.13.0-r20210706", "kernel": "5.13.0-27-beta", "revision": "r20210706", "default": true }, { "name": "ogLive-5.11.0-r20210413", "kernel": "5.11.0-22-generic", "revision": "r20210413", "default": false } ], "installed_pxe_templates": [ "default.ipxe", "template1.ipxe" ] } ``` **Informe de Discrepancias** (Ejemplo): ```json { "discrepancies": { "oglives": [ { "expected": { "name": "ogLive-5.13.0-r20210706", "default": true }, "actual": { "name": "ogLive-5.11.0-r20210413", "default": true } } ], "pxe_templates": [ { "expected": "default.ipxe", "actual": "template1.ipxe" } ] } } ``` #### 9. Sincronizar Datos de `ogboot` con `ogCore` - **Descripción**: `ogCore` sincroniza su base de datos con el estado actual de `ogboot`. Este proceso solo actualiza las discrepancias detectadas. - **Realización**: Requiere comunicación con **`ogBoot`** para obtener el estado actual. Luego, `ogCore` actualiza su base de datos con cualquier cambio detectado en los `ogLives` instalados, el `ogLive` por defecto, y las plantillas de arranque (`pxes`). **Endpoint**: - **`ogBoot`**: `/ogboot/v1/sync` - **Método**: `GET` - **Resultado de la Solicitud**: ```json { "installed_oglives": [ { "name": "ogLive-5.13.0-r20210706", "kernel": "5.13.0-27-beta", "revision": "r20210706", "default": true }, { "name": "ogLive-5.11.0-r20210413", "kernel": "5.11.0-22-generic", "revision": "r20210413", "default": false } ], "installed_pxe_templates": [ "default.ipxe", "template1.ipxe" ] } ``` ### Flujo de Trabajo: `pxe y pxe-template` #### NOTA En la implementación actual de OpenGnsys, se realiza una consulta SQL a la tabla `ordenadores`, haciendo joins con tablas como `aulas`, `centros`, `entidades`, etc. (consultar fichero `opengnsys/server/bin/setclientmode`) para obtener todos los parámetros necesarios para la creación de archivos PXE. Es necesario estudiar si existe la necesidad de crear una tabla `pxe` para almacenar estos parámetros. En caso de decidirse la creación de dicha tabla, podría tener los siguientes atributos: - `template_name` (nombre de la plantilla) - `mac` (dirección MAC) - `lang` (idioma) - `ip` (dirección IP) - `server_ip` (dirección IP del servidor) - `router` (router) - `netmask` (máscara de red) - `computer_name` (nombre del equipo) - `netiface` (interfaz de red) - `group` (grupo) - `ogrepo` (IP del repositorio) - `oglive` (IP del servidor en vivo) - `oglog` (IP del servidor de logs) - `ogshare` (IP del servidor compartido) - `oglivedir` (directorio en vivo) - `ogprof` (es profesor) - `hardprofile` (perfil de hardware) - `ogntp` (servidor NTP) - `ogdns` (servidor DNS) - `ogproxy` (servidor proxy) - `ogunit` (directorio de unidad) - `resolution` (resolución de pantalla) --- #### NOTA 2 ¿Tiene sentido hacer una tabla para las plantillas pxe-templates? Solo tendrian dos atributos: template-name y content. ¿No sería mejor que quedasen guardadas en el ogboot y se usen cuando se vaya a crear un fichero de arranque? Para estos flujos asumiremos que NO se han creado tablas a mayores de pxe ni de pxe-templates. Este es el flujo original que se produce actualmente en ogboot. 1. **Obtener Todos los Archivos de Arranque** - **URL**: `/ogboot/v1/pxes` - **Método HTTP**: GET - **Cuerpo de la Solicitud**: ```json { { "boot_files": [ "01-00:50:56:20:69:11", "01-00:50:56:20:69:12" ] } } ``` 2. **Obtener Configuración de Arranque por MAC** - **URL**: `/ogboot/v1/pxes/{mac}` - **Método HTTP**: GET - **Cuerpo de la Solicitud**: - **Respuesta**: ```json { "template_name": "pxe", "mac": "00:50:56:22:11:12", "lang": "es_ES.UTF-8", "ip": "192.168.2.11", "server_ip": "192.168.2.1", "router": "192.168.2.1", "netmask": "255.255.255.0", "computer_name": "pc11", "netiface": "eth0", "group": "Aula_virtual", "ogrepo": "192.168.2.1", "oglive": "192.168.2.1", "oglog": "192.168.2.1", "ogshare": "192.168.2.1", "oglivedir": "ogLive", "ogprof": "false", "hardprofile": "", "ogntp": "", "ogdns": "", "ogproxy": "", "ogunit": "", "resolution": "788" } ``` 3. **Obtener Todas las Plantillas de Arranque** - **URL**: `/ogboot/v1/pxe-templates` - **Método HTTP**: GET - **Respuesta**: ```json { "templates": [ "pxe", "pxe_default" ] } ``` 4. **Crear Plantilla de Arranque** - **URL**: `/ogboot/v1/pxes-templates` - **Método HTTP**: POST - **Cuerpo de la Solicitud**: ```json { "name_template": "pxe2", "content_template": "#!ipxe\\nset timeout 0\\nset timeout-style hidden\\n\\nset ISODIR ogLive\\nset default 0\\nset kernelargs INFOHOST\\nkernel tftp://SERVERIP/ogLive/ogvmlinuz ${kernelargs}\\ninitrd tftp://SERVERIP/ogLive/oginitrd.img\\nboot" } ``` - **Respuesta**: ```json { "message": "Plantilla creada exitosamente.", "template": "#!ipxe\\nset timeout 0\\nset timeout-style hidden\\n\\nset ISODIR ogLive\\nset default 0\\nset kernelargs INFOHOST\\nkernel tftp://SERVERIP/ogLive/ogvmlinuz ${kernelargs}\\ninitrd tftp://SERVERIP/ogLive/oginitrd.img\\nboot" } ``` 5. **Obtener Todas las Plantillas de Arranque** - **URL**: `/ogboot/v1/pxe-templates` - **Método HTTP**: GET - **Respuesta**: ```json { "templates": [ "pxe", "pxe2" "pxe_default" ] } ``` 6. **Crear archivo de Arranque** - **URL**: `/ogboot/v1/pxes` - **Método HTTP**: POST - **Respuesta**: ```json { "template_name": "pxe2", "mac": "00:50:56:22:11:13", "lang": "es_ES.UTF-8", "ip": "192.168.2.11", "server_ip": "192.168.2.1", "router": "192.168.2.1", "netmask": "255.255.255.0", "computer_name": "pc13", "netiface": "eth0", "group": "Aula_virtual", "ogrepo": "192.168.2.1", "oglive": "192.168.2.1", "oglog": "192.168.2.1", "ogshare": "192.168.2.1", "oglivedir": "ogLive", "ogprof": "false", "hardprofile": "", "ogntp": "", "ogdns": "", "ogproxy": "", "ogunit": "", "resolution": "788" } ``` 7. **Obtener Todos los Archivos de Arranque** - **URL**: `/ogboot/v1/pxes` - **Método HTTP**: GET - **Cuerpo de la Solicitud**: ```json { { "boot_files": [ "01-00:50:56:20:69:11", "01-00:50:56:20:69:12", "01-00:50:56:20:69:13" ] } } ``` 8. **Borrado de un fichero de arranque** - **URL**: `/ogboot/v1/pxes/{mac}` - **Método HTTP**: DELETE - **Respuesta**: ```json { "message": "El archivo de arranque se eliminó correctamente" } ``` 9. **Borrado de una plantilla** - **URL**: `/ogboot/v1/pxe-templates/{name}` - **Método HTTP**: DELETE - **Respuesta**: ```json { "message": "Plantilla eliminada correctamente." } ```