# Goal

We want to be able to instantiate a service that allows to store file located on a `processing` pod onto it. 

We have already tested it with a static `Argo` yaml file, a MinIO running on the same kubernetes node, the minio service is reached because it is the only associated to the `serviceAccount`.

We have established three otpions that need to be available to the user for the feature to be implemented: 

- Use a MinIO running constantly on the node that executes the argo workflow
- Use a MinIO
- A MinIO is instanciated when a new workflow is launched

# Requirements

- Helm : `https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3`
- Helm GO client : `$ go get github.com/mittwald/go-helm-client`
- MinIO chart : `https://charts.min.io/`


# Ressources

We need to create several ressources in order for the pods to communicate with the MinIO 

## MinIO Auth Secrets

## Bucket ConfigMap

With the name `artifact-repositories` this configMap will be used by default. It contains the URL to the MinIO server and the key to the authentication data held in a `secret` ressource. 

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
  # If you want to use this config map by default, name it "artifact-repositories".
  name: artifact-repositories
  # annotations:
  #   # v3.0 and after - if you want to use a specific key, put that key into this annotation.
  #   workflows.argoproj.io/default-artifact-repository: oc-s3-artifact-repository
data:
  oc-s3-artifact-repository: |
    s3:
      bucket: oc-bucket
      endpoint: [ retrieve cluster with kubectl get service argo-artifacts -o jsonpath="{.spec.clusterIP}" ]:9000
      insecure: true
      accessKeySecret: 
        name: argo-artifact-secret
        key: access-key
      secretKeySecret:
        name: argo-artifact-secret
        key: secret-key

```


# Code modifications

Rajouter un attribut "isDataLink" 
 - true/false

Rajouter un attribut DataPath ou un truc comme ca

  - liste de map[string]string permet de n'avoir qu'une copie par fichier)
  - éditable uniquement a travers la méthode addDataPath
  - clé : path du fichier / value : nom de la copie dans minio	

===> on a besoin du meme attribut pour Processing -> Data et Data -> Processing