765 lines
26 KiB
Markdown
765 lines
26 KiB
Markdown
## 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 (OGCORE)**
|
|
- **URL**: `/ogboot/v1/oglives/all`
|
|
- **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 (OGCORE)**
|
|
- **URL**: `/ogboot/v1/oglives/{name}`
|
|
- **Método HTTP**: GET
|
|
- **Descripción**: Obtiene información sobre un cliente ogLive instalado utilizando su nombre.
|
|
- **Parámetros**:
|
|
- `name` (string): Nombre del ogLive.
|
|
- **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 obtenida exitosamente.
|
|
- **404 Not Found**: ogLive no encontrado.
|
|
|
|
3. **Obtener Información del ogLive Predeterminado (OGCORE)**
|
|
- **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/{name}`
|
|
- **Método HTTP**: POST
|
|
- **Descripción**: Establece un cliente ogLive como predeterminado utilizando su nombre.
|
|
- **Parámetros**:
|
|
- `name` (string): Nombre 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/{name}`
|
|
- **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 único del registro, clave primaria. |
|
|
| `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';
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 7. Desinstalar un `ogLive`
|
|
|
|
- **Descripción**: Eliminar un `ogLive` instalado del sistema.
|
|
- **Realización**: Requiere comunicación con **`ogBoot`**
|
|
|
|
**Endpoint**:
|
|
- **`ogBoot`**: `/ogboot/v1/oglives/uninstall/550e8400-e29b-41d4-a716-446655440000`
|
|
- **Método**: `DELETE`
|
|
- **Cuerpo de la Solicitud**:
|
|
```json
|
|
{
|
|
"name": "ogLive-5.13.0-r20210706"
|
|
}
|
|
```
|
|
|
|
|
|
#### 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."
|
|
}
|
|
```
|
|
|
|
|