# Intregración Cloudian

## Requerimiento

Para la integración de almacenamiento de tipo objeto para los respaldos generados con la herramienta de [Velero](https://velero.io/), el requerimiento inicial era consumir el espacio disponible proporcionado por Cloudian, herramienta adquirida para proveer de varias soluciones de almacenamiento. Debido a las recomendaciones, así como limitaciones de la herramienta, se necesitaba crear una integración que realizara la creación automática de los accesos s3, individuales por cliente, se necesitaba crear mediante el consumo de API administrativa de Cloudian.

## Desarrollo

Para esta integración se utilizo un core de [Python](https://www.python.org/) para el desarrollo de un microservicio de tipo [GRPC](https://grpc.io/), estandar utilizado actualmente en la plataforma de DaaS, que consumiera el API Administrativa de Cloudian que generase todos los accesos requeridos.

## Entregables

Se realizara la entrega del código fuente (disponble actualmente en este repositorio), definiciones de tipo **Dockerfile** para la construcción de la imagen del contenedor, y los [protobufs](protobufs/cloudianConsumer.proto) necesarios para la definición de los servicios y mensajes a entregar.

Adicionalmente, se entregará la definición de un [Helm Chart](https://gitlab.triara.com/helm-packages/charts) y su publicación en el [Package Registry](https://gitlab.triara.com/helm-packages/charts/-/packages) disponible para su agil despliegue en clusters de [Kubernetes](https://kubernetes.io/).

## Estructura del Servicio

El servicio entregado, llamado **CloudianCosumer** consta de 5 métodos, 3 de creación y 2 de eliminación listados a continuación:
+ **Creción:**
    - CreateGroup: Recibe como parámetros el nombre y la descripción del grupo a crear, objeto que  almacenara el usuario a utilizar.
    - CreateUser: Recibe como parámetros el nombre del grupo, el nombre de usuario, y una descripción del usuario a crear, necesario para la asignación de accesos S3.
    - CreateS3Access: Recibe como parámetros el nombre de grupo y el nombre de usuario.
+ **Eliminación:**
    - DeleteGroup: Recibe como parámetro el nombre del grupo a eliminar.
    - DeleteUser: Recibe como parámetros el nombre del grupo, el nombre de usuario a eliminar.

Todos los métodos del servicio a entregar regresan una respuesta con la siguiente estructura:

+ Mensaje (**msg**): Atributo utilizado para almacenar una respuesta de la ejecución, ya sea correcta o incorrecta.
+ Error (**error**): Atributo opcional, cuando existe este atributo, almacena el error producido por la ejecución.
+ Data (**data**):Atributo opcional en el cual almacena la data, en caso de existir, retornada por el API administrativa de cloudian, este atributo tiene la siguiente estructura:
    - **key:** Almacena la llave del elemento de la data regresada por el API administrativa de cloudian.
    - **val:** Almacena el valor correspondiente a la llave previamente definida, el cual puede ser de tipo String (**strval**), Boolean (**boolval**) o Integer (**intval**), el nombre del atributo cambia dependiendo el tipo de dato a retornar.

## Diagrama

Aqui se representa gráficamente el proceso que seguiria el consumo de este micro servicio.

![Diagrama General](src/dia.png)

