# Documentación: Ocore y Oggui


## Escenario

Surge la necesidad de desplegar una imagen la cual se ha creado previamente mediante un equipo modelo, a cliente o grupo de clientes. 
La imagen está alojada en el repositorio de imágenes y se encuentra en estado **Creada con éxito**. 

Este es el escenario que se han utilizado para esta demostración:

- **Centro**:
    - Nombre: `Centro Demo`

- **Aula**:
    - Nombre: `Aula Demo`
    - Router IP: ` 192.168.2.1`
    - Máscara de red: `255.255.255.0`

- **Ordenador modelo**:
    - MAC Address: `08:00:27:4F:BE:38`
    - Nombre: `modelo`
    - Dirección IP: `192.168.2.2`

- **Ordenador sobre el que se desplegará la imagen**:
    - MAC Address: `08:00:27:0b:88:be`
    - Nombre: `pc1`
    - Dirección IP: `192.168.2.3`

- **Subred**:
    - Dirección: `192.168.2.0`
    - Máscara de red: `255.2555.255.0`

- **Imagen**:
    - Nombre: `image-test`
    - Descripción: `imagen de referencia`
    - Tipo: `Linux`
    - Versión: `Ubuntu 24.04`
    - Arquitectura: `x86_64`

- **Repositorio**:
    - Ruta: `/opt/opengnsys/ogrepository/images`
    - IP: `192.168.68.55`

- **ogAgent**:
    - versión: `1.4.5~pre7-1 all`

El objetivo es desplegar la imagen `image-test` en el cliente `pc1` con las características especificadas. Para ello como paso previo, se ha de tener conexion al cliente objetivo y tener instalado un sistema operativo ogLive.

Como requisito indispensable es tener formateado el equipo destino, y tener una particion en la cual se desplegará la imagen. Dicho equipo, deberá constar de por lo menos 2 particiones, una de ellas CACHE. 

En las siguientes capturas de pantalla, se muestra la disposición de los grupos y clientes en la interfaz grafica de ogGui.

![Grupos general](../../assets/images/screenshots/groups_general_1.png "Groups general")
![Grupos clients](../../assets/images/screenshots/groups_clients_1.png "Groups clients")

La herramienta ogGgui/ogCore nos proporciona una interfaz grafica mediante la cual podremos hacer el despliegue de la imagen. En la versión actual, lo haremos a traves de la pestaña "Clientes" dentro del panel de administración de grupos.

## Desplegar una imagen UNICAST

1. **Seleccionar cliente**. Mediante la pestaña de **Clientes** en el panel de administración de grupos, accedemos a las opciones del cliente pulsando en el boton "Visualizar" (el que tiene como icono un ojo).
   Esto nos da acceso al panel del cliente donde aparece su informacion general y el estado de las particiones. Arriba a la derecha, aparece un boton con todas las acciones disponibles.


![Client actions](../../assets/images/screenshots/client_actions_1.png "Client actions")

2. **Desplegar imagen**. Pulsamos en el botón "Deploy image" y rellenamos el formulario con los datos de correspondientes. En este caso, los datos son los siguientes:
    - **Tipo**: `deploy-image`
    - **Seleccionar imagen**: Seleccionamos la imagen que queremos desplegar. Aqui nos aparecen el listado de imagenes disponibles en el repositorio. Si hay alguna imagen corrupta o con errores, no aparecerá en el listado.
    - **Método**: `UNICAST`
    - **Seleccionar partición**: Seleccionamos la particion deseada.

![Client deploy image](../../assets/images/screenshots/client_deploy_image.png "Client deploy image")

Si todo ha ido bien, la intefaz grafica nos devuelve un mensaje de confirmacion verde, en la esquina inferior derecha.
Esto quiere decir que el ogAgent ha recibido correctamente la llamada mediante API y está trabajando en el despliegue.

## Trazas

Para el correcto funcionamiento del sistema, la comunicacion entre los componentes **ogCore**
, **ogAgent**  y **ogRepository** debe ser asíncrona. Para ello, se utilizan trazas que nos permiten ver el estado de las peticiones y las respuestas.

Podremos acceder a las trazas del sistema, en el botón con un icono de una **campana** en el menu superior de la interfaz grafica.
Se nos oferece un listado con todas las trazas del sistema. Podremos utilizar los filtros proporcionados si es necesario.

![Traces](../../assets/images/screenshots/traces_1.png "Traces")

Para el ejemplo demostrativo, vemos 1 traza:
- **deploy-image**: la traza nos informa del estado del agente respecto al despliegue de la imagen. Esta acción tarda unos minutos en completarse.


## Comprobar el despliegue de la imagen

1. Una vez obtengamos en la traza el mensaje de **Finalizado con éxito**, podremos comprobar que la imagen se ha desplegado correctamente en el cliente. Para ello, debemos cambiar la configuracion del cliente para que arranque por disco. En el caso que nos presenta, al estar utilizando VB, este seria un ejemplo:

![Configuration](../../assets/images/screenshots/vb_configuration.png "Configuration")

2. Reiniciamos el cliente y comprobamos que arranca correctamente con la imagen desplegada. 

![Traces](../../assets/images/screenshots/vb_deploy_client.png "Traces")

3. Comprobamos estados. Si hacemos `ip a` en una termina y nos aseguramos de que la IP es la que nuestro DHCP le ha asignado, en este caso `192.168.2.3`

![Client IP](../../assets/images/screenshots/vb_client_ip.png "Client IP")

4. Para terminar, ahora en nuestra consola web, el cliente deberia hacer cambiado el estado y mostrar **LINUX** y cuendo se inicie sesion, **LINUX_SESSION**

![Groups client](../../assets/images/screenshots/groups_clients.png "Client IP")

## Llamadas API a los distintos componentes


1. **ogAgent**: Esta es la llamada que ogCore realiza al ogAgent para que este despliegue la imagen. Nos devuelve como resultado un **job_id** que será el que nos muestre en la interfaz la traza relacionada con la creación esta imagen.

````
curl -X POST --data '{"dsk":"1", "par":"2", "cpt":"83", "ifs": "1", idi":"01936caf-facb-72ad-9446-97e7dbf2b96a", "nci":"image-test", "ipr":"192.168.68.55", "nfn":"RestaurarImagen", "method": "unicast", ids":"0"}' 
https://192.168.2.2:8000/CloningEngine/RestaurarImagen
{"job_id": "RestaurarImagen-dfa42888"}
````

Estas llamadas comunican sus estados a ogCore mediante **webhooks**, y este se encarga de procesar la respuesta y cambiar el estado cuando sea necesario.
