Changes for doc/getting_started/upgrade_guide/2025Q4_2026Q2.md: 275 added lines, 284 removed lines.
Original line number
Diff line number
Diff line
@@ -2,8 +2,7 @@
This guide upgrades a running OpenSlice instance from release 2025Q4 to release 2026Q2. Follow the
section that matches how the instance was installed: [Docker Compose](#upgrading-a-docker-compose-deployment)
or [Kubernetes](#upgrading-a-kubernetes-deployment).
section that matches how the instance was installed: [Kubernetes](#upgrading-a-kubernetes-deployment) or [Docker Compose](#upgrading-a-docker-compose-deployment).
The two paths differ in where your configuration lives. Docker Compose keeps it in generated files
that sit beside templates the new release updates, so every upgrade asks you to merge. Helm keeps it
@@ -12,7 +11,7 @@ in a values file outside the chart, which the upgrade never touches.
### What changes in this release
The complete difference between the two tags, across both deployment methods:
The complete difference between the two tags, across both deployment methods, as perceived in the main project:
| File | Change |
| ---- | ------ |
@@ -26,8 +25,7 @@ The complete difference between the two tags, across both deployment methods:
| `config.prod.default.json`, `config.theming.default.json` | version string |
| `pom.xml` | module versions |
No service is added or removed, no infrastructure image changes (Keycloak remains 16.1.1, MySQL
5.7.43, Artemis 2.31.1) and the Keycloak realm export is untouched. This is a routine upgrade.
No service is added or removed, no infrastructure image changes and the Keycloak realm export is untouched. This is a routine upgrade.
@@ -176,7 +440,7 @@ Eleven lines, all reading `2026Q2`.
> and then silently match nothing on every later upgrade.
The build in the next step tags what it produces with these names, so afterwards `docker ps` reports
the release you are running, and the 2025Q4 images remain on disk for a rollback.
the release you are running, and the 2025Q4 images remain on disk for a rollback. Older images are also available online by tag, so there is no compulsory need to keep them locally.
### 5. Build the new release
@@ -285,12 +549,11 @@ That last line must read `2026Q2` before you continue.
```bash
cd org.etsi.osl.main/compose
docker compose --profile prod up -d--build
docker compose --profile prod up -d
docker compose --profile prod restart
docker compose restart nginx
```
`--build` compiles the images from the checkouts and tags them with the names pinned in step 4.
> **Important Note:** Restart everything, not only the backends. A source build normally leaves
> MySQL, Keycloak and Artemis untouched, in which case the restart costs a few seconds. But if
@@ -378,278 +641,6 @@ from a stock installation that tag is `:latest`.
---
## Upgrading a Kubernetes deployment
The chart is at `[repo-root]/kubernetes/helm/openslice`. The examples below use `openslice` as both
the namespace and the Helm release name; substitute your own if they differ.
### 1. Prepare the environment
```bash
helm list -n openslice # CHART openslice-3.0.0, APP VERSION 2025Q4
helm get values openslice -n openslice > my-values.yaml
```
If that file contains `null`, your settings live in the chart's own `values.yaml`. This is the usual
outcome, because the 2025Q4 deployment guide instructs you to edit that file directly. Two problems
follow: `git checkout` refuses to move while a tracked file carries your edits, and an upgrade fed an
empty values file resets `rooturl`, `storageClass`, `oscreds` and every image tag to the shipped
defaults.
Move your settings out of the chart and hand the chart's own file back to git:
```bash
cd kubernetes/helm/openslice
git diff values.yaml # every line here belongs in my-values.yaml
cp-n values.yaml ~/values.yaml.mine
git checkout -- values.yaml
git status --porcelain# values.yaml must no longer appear
cd ../../..
```
> **Important Note:** `cp -n` is deliberate. If you run this step a second time, a plain `cp` would
> copy the file that `git checkout --` has already restored, replacing your saved settings with the
> shipped defaults. Supplying those to the upgrade is precisely the failure this step exists to
> prevent.
Now transcribe the settings from that comparison into `my-values.yaml`, for example:
```yaml
rooturl:http://<your-domain>
storageClass:<your-storage-class>
oscreds:
mysql:
keycloak:
password:"<your-keycloak-db-password>"
adminpassword:"<your-keycloak-admin-password>"
```
> **Note:** Do not carry the image tags across at this point. They are handled in step 5.
Back up the databases from the MySQL StatefulSet, and snapshot the volume behind
`<release>-mysql-portal-claim0` as well if your storage class supports it:
```bash
kubectl exec-n openslice sts/openslice-mysql --\
sh -c'mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --single-transaction --routines --events \
--databases osdb ostmfdb metricodb keycloak'\
> openslice-backup-$(date +%F).sql
ls-l openslice-backup-*.sql # a few MB, never zero
```
> **Note:** `--single-transaction` matters because the services continue writing while the dump
> runs, and this file is what the rollback procedure depends on.
### 2. Download the new release
```bash
git fetch --all--tags
git checkout tags/2026Q2
git describe --tags# 2026Q2
```
### 3. Refresh the Web UI configuration
The chart mounts `config.prod.json` and `config.theming.json`, the copies you made at install time.
The checkout cannot modify them, so they still carry the 2025Q4 version string, and each of them
places a version on screen: `PORTALVERSION` in the first, and a release name hardcoded inside
`FOOTER_HTML` in the second.
```bash
cd kubernetes/helm/openslice/files/org.etsi.osl.tmf.web/src/assets/config