# Uso de `run.sh`

El script `run.sh` automatiza el proceso de implementación para un entorno de `k8s` utilizando `minikube`. Incluye la construcción de imágenes `docker`, la personalización de versiones de `postgres`, la habilitación de `SSL` y la configuración de réplicas para la API.

## Requisitos

- [minikube](https://minikube.sigs.k8s.io/docs/start/)
- [docker](https://docs.docker.com/get-docker/)
- [helm](https://helm.sh/docs/intro/install/)

## Uso

```bash
./run.sh -i  # Modo interactivo
./run.sh -p <version> -s <Y|N> -r <number>  # Modo no interactivo
./run.sh -p <version> -s <Y|N> -r <number> -f  # Modo no interactivo con Fluentd habilitado
```

## Opciones de línea de comandos

- **-i:** Modo interactivo
- **-p <version>:** Especificar la versión de `postgres`
- **-s <Y|N>:** Habilitar o deshabilitar `SSL` (Y para sí, N para no)
- **-r <number>:** Especificar el número de réplicas para la API
- **-f:** Habilitar `fluentd` para la agregación de registros

## Funcionalidad del script

1. **Verificación del estado de minikube:**

   El script verifica si `minikube` ya está en ejecución y lo inicia si no lo está.

2. **Versión de postgres y construcción:**

   Solicita al usuario la versión de postgres, construye imágenes `docker` y actualiza la versión en el archivo de valores de `helm`.

3. **Configuración de TLS:**

   Pregunta al usuario si desea habilitar `TLS` y actualiza el archivo de valores de `helm` en consecuencia.

4. **Configuración de réplicas para la API:**

   Solicita al usuario el número de réplicas para la API y actualiza el archivo de valores de `helm`.

5. **Configuración de Ingress:**

   Habilita extensión ingress si `minikube` está en ejecución.

6. **Configuración de fluentd (opcional):**
  
   Se consulta al usuario si desea habilitar `fluentd` para la agregación de registros. Puede activarse o desactivarse directamente en el archivo `values.yaml`. Es importante destacar que, con el objetivo de mantener la simplicidad y evitar el "bloat" de `values.yaml`, se proporciona un archivo adicional llamado `fluentd.yaml`. Este archivo debe pasarse como parámetro `-f` a `helm` para configurar `fluentd` con los parámetros necesarios. Cabe señalar que esto es opcional, ya que `Fluentd` puede funcionar sin estas configuraciones, pero se recomienda su uso debido a que realiza algunas condiciones de contenedores de inicio para esperar el servicio de `fluentd` y para recopilar solo los registros de los contenedores `exam-*` (y no todos los registros de `k8s`).

   Se utiliza la siguiente instrucción al instalar o actualizar `helm`:

   ```bash
   helm install exam ./helm -n exam -f helm/values.yaml -f helm/fluentd.yaml
   ```

   Para ver los registros de los contenedores `exam-*`, podés usar:

   ```bash
   kubectl logs -n exam exam-fluentd-0
   ```

   Para realizar la configuración y el envío a un backend de registros como `elasticsearch`, podés editar `fluentd.yaml` según tus necesidades.

7. **Implementación de helm:**

   Verifica la existencia de un release de helm llamado "exam" y lo actualiza o instala según sea necesario.

### Uso

```bash
./build.sh -d <dominio> -b -v <versión>
```

### Opciones

- `-b`: Construye las imágenes de `docker`.
- `-v <version>`: Especifica la versión de `postgreSQL`.

### Ejemplo

```bash
./build.sh -d ejemplo.com -b -v 13.3
```