diff --git a/docs/ogboot-ogcore-communication-design.md b/docs/ogboot-ogcore-communication-design.md index bcb6654..56ee200 100644 --- a/docs/ogboot-ogcore-communication-design.md +++ b/docs/ogboot-ogcore-communication-design.md @@ -301,24 +301,35 @@ Para los nuevos flujos de trabajo, asumimos que habrá al menos una nueva tabla -### Flujo de Trabajo: `oglive` - - -### Propuesta de Flujo de Trabajo para `ogLive` +### 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. -- **Realización**: Puede realizarse directamente desde **`ogCore`** mediante una consulta a la base de datos `oglives`. +- **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. -- **Realización**: Necesita comunicación con **`ogBoot`**. Nota: Este proceso requiere de una consulta a Trac que se podría llevar a cabo desde el ogCore. +- **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` @@ -327,61 +338,128 @@ SELECT * FROM oglives; #### 3. Instalar un `ogLive` - **Descripción**: Instalar un `ogLive` seleccionado en el sistema. -- **Realización**: Requiere comunicación con **`ogBoot`** +- **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. -**Endpoint**: -- **`ogBoot`**: `/ogboot/v1/oglives` -- **Método**: `POST` -- **Cuerpo de la Solicitud**: - ```json - { - "isoname": "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso" - } - ``` +**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. -- **Realización**: Puede realizarse desde **`ogCore`** mediante una consulta a la base de datos `oglives`. +- **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'; ``` -#### 5. Ver el `ogLive` por Defecto -- **Descripción**: Obtener el `ogLive` que está configurado como predeterminado. -- **Realización**: Puede realizarse desde **`ogCore`** mediante una consulta a la base de datos `oglives`. +### 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 WHERE is_default = true; +SELECT * FROM oglives; ``` -#### 6. Asignar `ogLive` por Defecto +**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. -- **Realización**: Requiere comunicación con **`ogBoot`** para modificar el oglive por defecto en el tftpboot del **`ogBoot`** +- **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` +- **`ogBoot`**: `/ogboot/v1/oglives/default/550e8400-e29b-41d4-a716-446655440000` - **Método**: `POST` -- **Cuerpo de la Solicitud**: - ```json - { - "name": "ogLive-5.13.0-r20210706" - } + +**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` +- **`ogBoot`**: `/ogboot/v1/oglives/uninstall/550e8400-e29b-41d4-a716-446655440000` - **Método**: `DELETE` - **Cuerpo de la Solicitud**: ```json @@ -397,7 +475,7 @@ SELECT * FROM oglives WHERE is_default = true; - **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/status` +- **`ogBoot`**: `/ogboot/v1/oglive/status` - **Método**: `GET` - **Resultado de la Solicitud**: ```json