Commit 302fa180 authored by Dimitrios Gogos's avatar Dimitrios Gogos
Browse files

feat: add Data Lab Helm chart with deployment configurations

parent e5eedd47
Loading
Loading
Loading
Loading
+38 −0
Changes for README.md: 38 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ Intended for local development, integration testing, and demos. **Not for produc
| AI2 MCP | `oop` | MCP server exposing CAMARA-compliant tools |
| AI2 AI Agent | `oop` | Natural language interface backed by Groq |
| Portal | `oop` | Developer portal: web UI and its backend (login, OEG and AI2 proxy, API clients) |
| Data Lab | `oop` | Dataspace metadata catalogue: piveau hub and search, Virtuoso, Elasticsearch, the Data Lab UI and API. Off by default, see [Data Lab](#data-lab) |

---

@@ -149,6 +150,42 @@ reach the portal or OEG can deploy workloads on the cluster.

---

## Data Lab

`charts/datalab` deploys the [Data Lab](https://labs.etsi.org/rep/oop/code/data-lab) catalogue: piveau
hub-repo and hub-search, one Virtuoso (it also holds the hub's metrics and history), a single-node
Elasticsearch, and the Data Lab UI and API. The UI is the only public entry
(`http://<publicHost>:30083`, NodePort `global.nodePorts.datalab`); it forwards `/api/` to the API.
Users log in through realm `dataspace` of the platform Keycloak (`keycloak.realms.dataspace`), whose client
secrets are generated into `keycloak-credentials`. The Data Lab needs login: with `global.auth.enabled=false`
it is not deployed.

It is off by default. Turning it on takes two settings, because the Data Lab and its realm live in different
subcharts: `datalab.enabled` deploys the Data Lab, `keycloak.realms.dataspace.enabled` creates realm `dataspace`
in Keycloak. Set both: with only the first, nobody can log in to the Data Lab and its pods wait for a realm that
never comes; with only the second, the realm exists with nothing using it.

```bash
helm upgrade --install oop-platform ./oop-platform-chart -n oop -f environments/kind/values.yaml \
  --set datalab.enabled=true --set keycloak.realms.dataspace.enabled=true
```

or set both to `true` in your values file. Turning it on in an existing installation restarts Keycloak, which then
imports realm `dataspace`.

- The hub and search API keys and the Virtuoso password are generated into Secret `datalab-credentials`, kept on
  `helm uninstall` like the Virtuoso and Elasticsearch volumes. A Job creates the catalogues `oop-org` and
  `oop-org-staging` on every install and upgrade.
- On kind, realm `dataspace` gets test users `steward` (a data steward), `alice` and `bob`, sharing the password
  in `keycloak-credentials` → `dev-user-password`.
- Catalogue permissions live in two places: piveau's data (Virtuoso) and the groups piveau creates in realm
  `dataspace`. To reset the Data Lab, delete both: the `data-datalab-virtuoso-0` and
  `data-datalab-elasticsearch-0` volumes and Secret `datalab-credentials`, and realm `dataspace` (admin console;
  it is imported again when Keycloak restarts). Deleting only one leaves users with memberships of catalogues
  that no longer exist.

---

## Deploy on kind (one command)

```bash
@@ -209,6 +246,7 @@ the issuer from Keycloak's discovery document, so nothing else needs the address
| AI2 MCP | http://localhost:32004 |
| AI2 AI Agent | http://localhost:32013 |
| Portal | http://localhost:30082 |
| Data Lab (when enabled) | http://localhost:30083 |

---

+5 −0
Changes for environments/kind/cluster.yaml: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -39,6 +39,11 @@ nodes:
    hostPort: 30082
    protocol: TCP

  # Data Lab (oop namespace)
  - containerPort: 30083    # Data Lab UI
    hostPort: 30083
    protocol: TCP

  # Storage volumes for MongoDB persistence
  extraMounts:
  - hostPath: /tmp/kind-oop/mongodb_srm
+7 −0
Changes for environments/kind/values.yaml: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -71,6 +71,9 @@ keycloak:
    oop:
      sampleUsers:
        enabled: true
    dataspace:
      sampleUsers:
        enabled: true

ai2:
  images:
@@ -97,6 +100,10 @@ portal:
  oeg:
    publicUrl: http://localhost:32263

datalab:
  keycloak:
    stewardSampleUser: true


databus:
  nats:
+5 −2
Changes for oop-platform-chart/Chart.lock: 5 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -20,8 +20,11 @@ dependencies:
- name: portal
  repository: ""
  version: 1.0.0
- name: datalab
  repository: ""
  version: 1.0.0
- name: nats
  repository: https://nats-io.github.io/k8s/helm/charts/
  version: 1.2.10
digest: sha256:7ca197be9b2d2b7c7826398016c8cc6628a968fcbfc077e46b1cca48d29f5863
generated: "2026-09-14T16:53:21.241543984+03:00"
digest: sha256:e54e4032eca08476244506cf57d5092d18f0333c8aae203171b48f3e3b042142
generated: "2026-10-14T10:48:52.91862144+03:00"
+5 −1
Changes for oop-platform-chart/Chart.yaml: 5 added lines, 1 removed line.
Original line number Diff line number Diff line
apiVersion: v2
name: oop-platform
description: Open Operator Platform - Complete platform deployment (SRM, OEG, Federation Manager, AI2, Portal, PostgreSQL and Keycloak)
description: Open Operator Platform - Complete platform deployment (SRM, OEG, Federation Manager, AI2, Portal, Data Lab, PostgreSQL and Keycloak)
type: application
version: 1.0.0

@@ -17,6 +17,7 @@ keywords:
  - ai-agent
  - portal
  - frontend
  - datalab

maintainers:
  - name: Open Operator Platform Team
@@ -50,6 +51,9 @@ dependencies:
  - name: portal
    version: "1.0.0"
    condition: portal.enabled
  - name: datalab
    version: "1.0.0"
    condition: datalab.enabled
  - name: nats
    version: "1.2.10"
    repository: "https://nats-io.github.io/k8s/helm/charts/"
Loading