Modul-Version austauschen (Modul-Upgrade)

So kann man die Version eines Moduls austauschen. Klassisches Beispiel: Bugfix. In einem einzelnen Modul hat es einen Bugfix gegeben, und man will das neue Modul installieren. Hier am Beispiel mod-configuration-5.4.1  → mod-configuration-5.4.4


1. Die in Okapi angemeldete Modul-Instanz von mod-configuration undeployen (entfernen)

# zuerst Service-Id und InstId des Moduls holen:
curl -w '\n' -XGET http://localhost:9130/_/discovery/modules | jq '.[] | .srvcId + "/" + .instId' | grep configuration
curl -w '\n' -D - -XDELETE http://localhost:9130/_/discovery/modules/mod-configuration-5.4.1/20056219-ad62-4568-8672-1eed12322def
HTTP/1.1 204 No Content
Content-Type: application/json
X-Okapi-Trace: DELETE okapi-3.1.2 /_/discovery/modules/mod-configuration-5.4.1/20056219-ad62-4568-8672-1eed12322def : 204 10738922us

2. Den Moduldeskriptor für mod-configuration-5.4.4 holen, so:

wget http://folio-registry.aws.indexdata.com/_/proxy/modules/mod-configuration-5.4.4 -O configuration-module-descriptor.json

3. Den Moduldeskriptor für mod-configuration-5.4.4 senden (es gibt ihn im System noch nicht), so:

curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d @configuration-module-descriptor.json http://localhost:9130/_/proxy/modules
HTTP/1.1 100 Continue
 
HTTP/1.1 201 Created
Content-Type: application/json
Location: /_/proxy/modules/mod-configuration-5.4.4
X-Okapi-Trace: POST okapi-3.1.2 /_/proxy/modules : 201 30186258us

4. Einen neuen Deployment-Deskriptor bauen

cat > configuration-deployment-descriptor.json <<END
{
"srvcId": "mod-configuration-5.4.4",
"nodeId": "10.9.2.62"
}
END

5.  Bereitstellen: Den Deployment-Deskriptor für das neue mod-configuration an $OKAPI_URL/_/discovery/modules senden (Re-deploy):

curl -i -w '\n' -X POST -H 'Content-type: application/json' -d @configuration-deployment-descriptor.json http://localhost:9130/_/discovery/modules
HTTP/1.1 201 Created
Content-Type: application/json
Location: /_/discovery/modules/mod-configuration-5.4.4/*
X-Okapi-Trace: POST okapi-3.1.2 /_/discovery/modules : 201 9906us
content-length: 119

Nun muss für den Mandanten noch die alte Modulversion deaktiviert und die neue aktiviert werden.

Dazu müssen leider zunächst alle Module deaktiviert werden, da es sonst Probleme mit fehlenden Abhängigkeiten gibt.

6. Alle Module für den Mandanten deaktivieren, außer Okapi

Hole die Liste der Module für diesen Mandanten und schreibe in eine Datei

curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules > disable_modules.sh

Sende LÖSCHEN an /_/proxy/tenants/<tenantId>/modules/<moduleId> für jedes Modul in der Liste, aber lasse Okapi aktiviert!

curl -w '\n' -XDELETE http://localhost:9130/_/proxy/tenants/diku/modules/folio_calendar-1.0.100018
curl -w '\n' -XDELETE http://localhost:9130/_/proxy/tenants/diku/modules/folio_checkin-1.1.100049
curl -w '\n' -XDELETE http://localhost:9130/_/proxy/tenants/diku/modules/folio_checkout-1.1.4000158
...

Aufgrund "fehlender Anhängigkeiten" werden nicht alle Module gelöscht. Zuerst die fehlenden Abhängigkeiten löschen. Dann das Löschen aller Module (ein Skript dafür schreiben!) sooft ausführen, bis alles gelöscht ist. Am Ende darf nur noch stehen:

curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules
[ {
  "id" : "okapi-3.1.2"
} ]

7. Re-aktiviere alle Module für den Mandanten

Zunächst muss die Datei okapi-install.json editiert werden, um in ihr die neue Modul-Version einzutragen:

vim /usr/folio/platform-complete/okapi-install.json
# Editiere: mod-configuration-5.4.1 => mod-configuration-5.4.4
:wq

8. Sende "activate" an alle Module für diesen Mandanten:

# Alle Backend-Module aktivieren:
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/okapi-install.json http://localhost:9130/_/proxy/tenants/diku/install?deploy=false\&preRelease=false
# auch die Frontend- und Edge-Module wieder aktivieren:
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/stripes-install.json http://localhost:9130/_/proxy/tenants/diku/install?preRelease=false

9. Nun mal einen Gesundheitscheck machen:

curl -w '\n' -XGET http://localhost:9130/_/discovery/health
# => Alles "OK"