Skip to content

IVAAP Helpers



IVAAP Deployment Operations Guide
ivaap-helpers




IVAAP 2025.1

Introduction

IVAAP Helpers is a public repository that includes many helpful aliases, functions, shortcuts and notes for managing IVAAP deployments! The “ivaap-helpers” repository also contains an “examples” directory containing sample configuration for a prometheus.yaml file and a .json Grafana dashboard for monitoring IVAAP cluster metrics.

Setup

IVAAP Helpers can be cloned anywhere you'd like on the file system where you will be managing IVAAP. What is important is ensure that the full path to the file ivaap-helpers/aliases/ivaap_k8s_aliases.sh is sourced in your ~/.bashrc.

cd ~
git clone "https://gerrit.int.com/ivaap-helpers"

edit ~/.bashrc
# Now that you’re in the editor, add where appropriate to load aliases:

source /path/to/ivaap-helpers/aliases/ivaap_k8s_aliases.sh

Quick Start Guide

One of the functions we have added is simply to run the command ivaap-helpers to get a print out of all aliases and functions, with a short description. This is essentially the man page for ivaap-helpers.

user@linux$ ivaap-helpers

Kubectl Shortcuts
---------------------------------------
ki <namespace>                                Shotcut for 'kubectl -n <namespace> - can be used for all kubectl commands
ki exec <namespace> <pod> <container>         Shell into a pod with fuzzy search on pod name. Ex: 'ki exec ivaap backend playnode'

Quick Directory Access
---------------------------------------
cdir                                          cd to ivaap directory
vdir                                          cd to ivaap-volumes directory
ldir                                          cd to ivaap-volumes/logs directory

IVAAP Health
---------------------------------------
ibhealth <namespace>                          check health API for backend nodes
wibhealth <namespace>                         watch health API as backend nodes come up after restart

IVAAP Logging
---------------------------------------
adminserver.logs <namespace>                  View adminserver logs with command 'less'
activemq.logs <namespace>                     View activemq logs with command 'less'
proxy.logs <namespace>                        View proxy logs with command 'less'
backend.logs <namespace> <container-name>     View backend logs with command 'less'

IVAAP Metadata
---------------------------------------
icvt <namespace>                              Print version tags for image creation

IVAAP Database
---------------------------------------
encryptZalandoPGPassword <namespace>          Encrypt ivaapserver PostgreSQL user's password.
ivaap_pgdump <namespace>                      Create postgres dump of IVAAP database

IVAAP Deployment Debugging
---------------------------------------
aailogs                                       Create tarball of all logs in ivaap-volumes/logs
ailogs                                        Create tarball of last 7 days of logs in ivaap-volumes/logs

IVAAP DevOps Administration
---------------------------------------
iastrust <namespace>                          Show circle of trust challenge and session tokens
iasabout <namespace>                          Show Adminserver about API
ibmetrics <namespace>                         Show ivaap backend metrics
ibabout <namespace>                           Show ivaap backend about

3rd Party Tools
---------------------------------------
installyq                                     Install yq on the host
installjq                                     Install jq on the host

Walkthrough

Kubectl shortcuts

ki

The alias ki is our shortcut for the kubectl command.

user@linux:~$ ki
Error: Namespace argument is required.
Usage: ki <namespace>
When using ki, just provide the namespace as an argument, then continue adding additional kubectl arguments, such as get pods, get nodes, describe pod <podname, etc. So for example: kubectl -n ivaap get pods is the same as ki ivaap get pods
user@linux:~$ ki ivaap get pods
NAME                                                  READY   STATUS    RESTARTS   AGE
adminserver-deployment-767cfcd75f-z7v4m               1/1     Running   0          3d14h
dozzle-5bf7b7bdf-lsxsr                                1/1     Running   0          47h
ivaap-activemq-deployment-7855b985c5-25c2c            1/1     Running   0          3d14h
ivaap-admin-deployment-6bbb755b9c-6f9wm               1/1     Running   0          3d14h
ivaap-backend-deployment-865db7d9fb-vsvrb             8/8     Running   0          47h
ivaap-dashboard-deployment-8478559c56-wq9pq           1/1     Running   0          3d14h
ivaap-dashboard-publish-deployment-7546c9559d-sbwgl   1/1     Running   0          3d14h
ivaap-proxy-deployment-6ddc7df6db-c2h7q               1/1     Running   0          3d14h

Other examples: * ki <namespace> logs <podname> * ki <namespace> describe pod <podname> * ki <namespace> get nodes * ki <namespace> get ing * ki <namespace> describe ing * ki <namespace> get secrets * ki <namespace> describe secret <secretname> * ki <namespace> get configmap * ki <namespace> describe configmap * ki <namespace> get configmap <configmap_name> -o yaml

As you can see, this can work with any possible kubectl command, but this way is much easier than typing kubectl -n <namespace> each time.

Tip

For easier readability, any kubernetes command can be piped into less. This is particularly useful for long outputs where you may need to search for a keyword. Example: ki <namespace> logs <podname> | less

ki exec

user@linux:~$ ki exec
Usage: ki exec <namespace> <fuzzy-pod-name> [container-name]

The ki exec function is likely one of the most useful shortcuts in ivaap-helpers. This function is a smart shortcut for kubectl exec, allowing the user to quickly shell into a pod/container using fuzzy searches. Below is an example of how to normally shell into our adminserver pod using standard kubectl command:

user@linux:~$ kubectl exec -n ivaap -it adminserver-deployment-767cfcd75f-z7v4m -- /bin/bash
adminserver-deployment-767cfcd75f-z7v4m:/opt/ivaap/adminserver$
And now, with ki exec:
user@linux:~$ ki exec ivaap adminserver
adminserver-deployment-767cfcd75f-z7v4m:/opt/ivaap/adminserver$
As you can see, we don't even need to specify the pod name since we can use a fuzzy search for the adminserver pod. This is even more beneficial for the backend pod. The backend pod consists of multiple containers inside, so we can also fuzzy search for the container name we want to view:
user@linux:~$ ki exec ivaap backend opensdublobstorager3node
ubuntu@ivaap-backend-deployment-865db7d9fb-vsvrb:/opt/ivaap/ivaap-playserver/deployment$

Without ivaap-helpers, this command would have been:

user@linux:~$ kubectl exec -n ivaap -it ivaap-backend-deployment-865db7d9fb-vsvrb -c opensdublobstorager3node -- /bin/bash
ubuntu@ivaap-backend-deployment-865db7d9fb-vsvrb:/opt/ivaap/ivaap-playserver/deployment$

Quick Directory Access (K3s Only)

The aliases under this section are specific to K3s single-server deployments only. These are not applicable to any other kubernetes deployment.

cdir

The cdir function navigates you to the deployment directory in /opt/ivaap.

user@linux:~$ cdir
user@linux:/opt/ivaap$ ls
IVAAPHelmTemplate  backups  certs  ivaap-helpers  ivaap-volumes

vdir

The vdir alias navigates you to the ivaap-volumes directory where persisted data reside, such as logs and geofiles data.

user@linux:~$ vdir
user@linux:/opt/ivaap/ivaap-volumes$ ls
geofiles  logs  postgres-operator

ldir

The ldir alias navigates you to the ivaap-volumes/logs directory where K3s logs reside.

user@linux:~$ ldir
user@linux:/opt/ivaap/ivaap-volumes/logs$ ls
activemq  adminserver  backend  proxy  scheduledtasks

IVAAP Health

ibhealth

The ibhealth function shows the current status of the backend Pekko cluster's health API. The syntax is ibhealth <namespace>:

user@linux:~$ ibhealth ivaap
{
  "timestamp" : 1755623515665,
  "health" : "healthy",
  "available" : "admin,blobstorage,cloudstorage,dataimport,epsg,geofiles,geofiles::reservoirs,geofiles::seismic,messaging,mongo,mqgateway,ppdm,s3,witsml",
  "activeMQConnectionStatus" : {
    "healthy" : true
  }
}

wibhealth

The wibhealth function is the same as ibhealth, but it watches the status and shows it continuously updated every 3 seconds. This function continues to run until the user stops it with Ctrl+C. The syntax is wibhealth <namespace>.

IVAAP Logging

IVAAP Logging
---------------------------------------
adminserver.logs <namespace>                  View adminserver logs with command 'less'
activemq.logs <namespace>                     View activemq logs with command 'less'
proxy.logs <namespace>                        View proxy logs with command 'less'
backend.logs <namespace> <container-name>     View backend logs with command 'less'

New shortcuts have been added for easily viewing logs for IVAAP components. For each of these functions, just provide the namespace as an argument. This will open the logs for the specified pod in less to allow for easy navigation, searching, and readability of the logs.

For the backend pod, two arguments are expeted - namespace and container name.

These functions can also be used to easily save logs onto the file system to save for later or share with other team members.

user@linux:~$ adminserver.logs ivaap > adminserver_2025-12-17.log
user@linux:~$ ls
adminserver_2025-12-17.log

IVAAP Metadata

icvt

The icvt function stands for IVAAP Container Versioned Tags, and will print a list of all of the currently deployed versioned tags. This scrapes through all IVAAP container metadata. The syntax is icvt <namespace>

user@linux:~$ icvt ivaap
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/adminserver:adminserver-3.0.42-569ce02-eclipse-temurin-21-jdk-alpine-202506262109Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/activemq:activemq-6.1.7-96e1cba9-202506251620Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/admin-client:ivaap_admin-3.0.2-dev2
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/adminnode:adminnode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/epsgnode:epsgnode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/messagingnode:messagingnode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/mqgatewaynode:mqgatewaynode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/playnode:playnode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/seednode:seednode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/blobstoragenode:blobstoragenode-3.0-3-bb04d54-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/cloudstoragenode:cloudstoragenode-3.0-3-fd24b41-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/dataimportnode:dataimportnode-3.0-3-0af410b-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/geofilesmasternode:geofilesmasternode-3.0-2-f38d7a2-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/geofilesreservoirsnode:geofilesreservoirsnode-3.0-2-f38d7a2-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/geofilesseismicnode:geofilesseismicnode-3.0-2-f38d7a2-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/mongonode:mongonode-3.0-6-77b1f74-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/ppdmnode:ppdmnode-3.0-4-5fcc873-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/s3node:s3node-3.0-4-7b59464-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/witsmlnode:witsmlnode-3.0-1-c2f557d-20250708T223606Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-3.4.0
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-3.4.0
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/infinispan:infinispan-15.1.7.Final-fa466eec-20250623T152424Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/proxy:proxy-2024.0-cce98866-20250627T135324Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/task-release:witsmlliveupdatetask_release-3.0.1-1511246-202507091432-20250709T143406Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/task-release:witsmlpollingtask_release-3.0.1-1511246-202507091432-20250709T143406Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/task-release:witsmlwelltrajectorypollingtask_release-3.0.1-1511246-202507091432-20250709T143406Z

IVAAP Database

encryptZalandoPGPassword (K3s Only)

The encryptZalandoPGPassword is only applicable to K3s single-server VM deployments where Zalando Postgres Operator is being used. Zalando generates a user password automatically. This password must be encrypted and configured in the IVAAP Helm Template for the adminserver to establish connection.

This function serves as an easy way to collect this password and encrypt it. The function will prompt the user to enter an encryption key. This key will be used to encrypt the password, and can be whatever you choose. The syntax is encryptZalandoPGPassword <namespace>.

user@linux:~$ encryptZalandoPGPassword ivaap
Enter your desired encryption key for encrypting the password: myEncryptionKey
Encrypting kX7pQmRz8dFo1VYt4jBHE2cNS0gqPwGnaK5lMuO9ZxhyLJrDf3TeCb6WsivUoXpA ...
kPefW6JHY4cUmCZlywoxwqxGx22N+PZZgrNmIROUGbB9dXQB6OkJy6ww5maISUNipluYuHtW28pME4ZUhq3uJmPsdMAm5AGUFNYuRaB/SI4=

ivaap_pgdump

The function ivaap_pgdump conveniently creates a PostgreSQL database dump to keep as a backup. This works regardless of how the database is deployed, as it uses all database connection environment variables within the adminserver pod. Syntax is ivaap_pgdump <namespace>.

user@linux:~$ ivaap_pgdump ivaap
Backup successfully created and validated: ivaap-postgres-ivaap-2025-08-19_17-27-53.sql.gz
To extract the dump, use: gunzip ivaap-postgres-ivaap-2025-08-19_17-27-53.sql.gz before loading it.

IVAAP Deployment Debugging (K3s Only)

aailogs & ailogs

The alias aailogs creates tarball of all logs in ivaap-volumes/logs on K3s single-server deployments, and saves it to the home directory.

Sometimes, IVAAP logs directory can be quite large, especially for long running deployments. It may only be necessary to collect recent logs. In these cases, ailogs can be used, which creates a tar file of the logs from only the last 7 days.

IVAAP DevOps Administration

iastrust

The prefix ias stands for IVAAP Adminserver, and the iastrust alias scrapes the IVAAPServer/api/v2/trust API, and collects the circle of trust challenge and session tokens. The syntax is iastrust <namespace>.

user@linux:~$ iastrust ivaap
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617  100   617    0     0   355k      0 --:--:-- --:--:-- --:--:--  602k
{
  "challenge": "QCnkcqDoSVRw1QBLunHTIFJxqfXNIbRUr2Vsv4eIyi1Nnis82lN21MfffcYx/wa5DO7ZfNM84zKVCfNuO8fYMPVUyBHpMpRS6G5aJ1igzdVar7fP1/cvUSkRxrW3kHCVhWo07I4w9INYlkBD8rqaAukXTxAPgOVvf8ZFPlfpIY20lPjZeEyPlGSUI4vv168P2tfNH6HUCm72AaBXPhs+d3xdkLVciTacM3/EdIphEaCvZFy87UN0yGOCiPV7m7dvll4RBZ85Qh72tKBHxROuEdFxLKRe32qowatyb5uFHmQh2Nbfx2qs9W/+9xg9CBS7nwn5BDhA43Lzsx8P8UCFTg==",
  "session": "4ASkKWt0E1HlfsWPxcricgbZbSqoN3HywMlOOlx3gMqOuRtoBJrzd2G6KAARVktf5AcrX9rXMPB3YrNxkTgWNiXNUu1QCxpYNkIHdL4e42r572FuStKTwLcYVixYtGZSATQa8OqPieI91rQCak2zpxtuWJKqPTN0kHfSKzGNc3VoxIf0fGUVPOcwnoCFMx9akgWox8KKW9Dn99ZmbjXWvrfGj0qDViNfD61ecu2Nlh3lWN04tuVt"
}

iasabout

The iasabout alias shows the output of the Adminserver's about API (IVAAPServer/api/v2/about). This contains information about the postgres database, and other metrics. The syntax is iasabout <namespace>.

user@linux:~$ iasabout ivaap
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   973    0   973    0     0  44189      0 --:--:-- --:--:-- --:--:-- 44227
{
  "name": "IVAAP Data Backend",
  "database": {
    "version": "PostgreSQL 15.12",
    "description": "PostgreSQL 15.12 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-17), 64-bit"
  },
  "localTime": {
    "day": 19,
    "dayOfYear": 231,
    "month": 8,
    "year": 2025,
    "hour": 17,
    "minute": 45,
    "second": 37,
    "millisecond": 83
  },
  "localTimeZone": {
    "id": "GMT",
    "name": "(GMT0:00) GMT"
  },
  "api": {
    "versions": [
      {
        "id": "v2",
        "links": [
          {
            "rel": "OpenApi Specification",
            "name": "OpenApi Specifications",
            "relEntity": "v1/schema/int/openapispec",
            "children": false,
            "hasProjectEntityChildren": false,
            "isProjectEntity": false,
            "href": "/IVAAPServer/api/v2/openapispecs"
          },
          {
            "rel": "Test Result",
            "name": "Test Results",
            "relEntity": "v1/schema/int/testresult",
            "children": false,
            "hasProjectEntityChildren": false,
            "isProjectEntity": false,
            "href": "/IVAAPServer/api/v2/testresults"
          }
        ]
      }
    ]
  },
  "metrics": {
    "startTime": "Tue Aug 05 21:05:36 GMT 2025",
    "startTimestamp": 1754427936937,
    "upTime": "13 Days, 20 Hours and 40 Minutes",
    "timestamp": 1755625537095
  }
}

ibmetrics

The ibmetrics alias shows the ouput of the IVAAP Backend metrics api (/ivaap/api/v1/cluster/services/metrics). The syntax is ibmetrics <namespace>.

user@linux:~$ ibmetrics ivaap
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2498  100  2498    0     0  15792      0 --:--:-- --:--:-- --:--:-- 15710
{
  "timestamp": 1755625661223,
  "configuredServiceRoleCount": 5,
  "configuredServiceRoleNames": "admin,epsg,messaging,mqgateway,opensdus3",
  "servicesMetricsCount": 6,
  "servicesMetricsValues": [
    {
      "name": "admin",
      "UUID": "cfab815f-6a4d-4614-8e38-862ade0a6573",
      "startTime": "Tue Aug 05 21:05:59 GMT 2025",
      "startTimestamp": 1754427959274,
      "upTime": "13 days, 20 hours and 41 minutes",
      "processCpuLoadPct": 0.08415484491464295,
      "processCpuTime": 23642750000000,
      "usedHeapKB": 248389,
      "committedHeapKB": 643072,
      "threadCount": 88,
      "daemonThreadCount": 19,
      "peakThreadCount": 104,
      "timestamp": 1755625661110
    },
    {
      "name": "epsg",
      "UUID": "95885a13-ce4a-4751-8c93-975d9ecad601",
      "startTime": "Tue Aug 05 21:06:08 GMT 2025",
      "startTimestamp": 1754427968221,
      "upTime": "13 days, 20 hours and 41 minutes",
      "processCpuLoadPct": 0.1571503404924044,
      "processCpuTime": 24043780000000,
      "usedHeapKB": 156462,
      "committedHeapKB": 737280,
      "threadCount": 82,
      "daemonThreadCount": 21,
      "peakThreadCount": 97,
      "timestamp": 1755625661119
    },
    {
      "name": "messaging",
      "UUID": "54e949d6-1c1c-4834-b95d-ffc7fe94bc0d",
      "startTime": "Tue Aug 05 21:06:11 GMT 2025",
      "startTimestamp": 1754427971010,
      "upTime": "13 days, 20 hours and 41 minutes",
      "processCpuLoadPct": 0.2789400278940028,
      "processCpuTime": 23571450000000,
      "usedHeapKB": 313052,
      "committedHeapKB": 524288,
      "threadCount": 82,
      "daemonThreadCount": 17,
      "peakThreadCount": 99,
      "timestamp": 1755625661123
    },
    {
      "name": "mqgateway",
      "UUID": "22bc5d91-17df-40fe-980a-8432d108bf2b",
      "startTime": "Tue Aug 05 21:06:16 GMT 2025",
      "startTimestamp": 1754427976922,
      "upTime": "13 days, 20 hours and 41 minutes",
      "processCpuLoadPct": 6.315789473684211,
      "processCpuTime": 23864660000000,
      "usedHeapKB": 369535,
      "committedHeapKB": 654336,
      "threadCount": 73,
      "daemonThreadCount": 15,
      "peakThreadCount": 97,
      "timestamp": 1755625661126
    },
    {
      "name": "opensdus3",
      "UUID": "75d644ae-551f-4c90-b670-52d602b85b0c",
      "startTime": "Tue Aug 05 21:06:37 UTC 2025",
      "startTimestamp": 1754427997154,
      "upTime": "13 days, 20 hours and 41 minutes",
      "processCpuLoadPct": 0.41356492969396197,
      "processCpuTime": 24712230000000,
      "usedHeapKB": 81845,
      "committedHeapKB": 679936,
      "threadCount": 89,
      "daemonThreadCount": 22,
      "peakThreadCount": 107,
      "timestamp": 1755625661122
    },
    {
      "name": "play",
      "UUID": "13e4c1e6-7087-4cc8-bd69-5aeae0c6816d",
      "startTime": "Tue Aug 05 21:06:20 GMT 2025",
      "startTimestamp": 1754427980136,
      "upTime": "13 days, 20 hours and 41 minutes",
      "processCpuLoadPct": 0.46807489198271723,
      "processCpuTime": 22216900000000,
      "usedHeapKB": 417347,
      "committedHeapKB": 921600,
      "threadCount": 71,
      "daemonThreadCount": 16,
      "peakThreadCount": 72,
      "timestamp": 1755625661195
    }
  ]
}

ibabout

The ibabout alias shows the IVAAP Backend's about API (/ivaap/api/about). The syntax is ibabout <namespace>.

user@linux:~$ ibabout ivaap
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1688  100  1688    0     0   113k      0 --:--:-- --:--:-- --:--:--  117k
{
  "name": "IVAAP Data Backend",
  "version": "3.0.3-0af410b",
  "majorVersion": "3",
  "minorVersion": "0",
  "buildVersion": "3-0af410b",
  "localTime": {
    "day": 19,
    "dayOfYear": 231,
    "month": 8,
    "year": 2025,
    "hour": 17,
    "minute": 49,
    "second": 10,
    "millisecond": 743
  },
  "localTimeZone": {
    "id": "GMT",
    "name": "(GMT0:00) GMT"
  },
  "licenses": {
    "IVAAPServer": {
      "type": "expires",
      "state": "valid",
      "expiration": {
        "daysUntilExpiration": 6,
        "day": 25,
        "dayOfYear": 237,
        "month": 8,
        "year": 2025
      }
    }
  },
  "api": {
    "versions": [
      {
        "id": "v1",
        "links": [
          {
            "rel": "OpenApi Specification",
            "name": "OpenApi Specifications",
            "relEntity": "v1/schema/int/openapispec",
            "children": false,
            "hasProjectEntityChildren": false,
            "isProjectEntity": false,
            "href": "/ivaap/api/ds/v1/openapispecs"
          },
          {
            "rel": "Source Type",
            "name": "Source Types",
            "relEntity": "v1/schema/int/sourceType",
            "children": false,
            "hasProjectEntityChildren": true,
            "isProjectEntity": false,
            "href": "/ivaap/api/ds/v1"
          },
          {
            "rel": "Formula Evaluation",
            "name": "Formula Evaluations",
            "relEntity": "v1/schema/int/formulaevaluation",
            "children": false,
            "hasProjectEntityChildren": false,
            "isProjectEntity": false,
            "href": "/ivaap/api/v1/formulas/evaluation"
          },
          {
            "rel": "Formula Variable",
            "name": "Formula Variables",
            "relEntity": "v1/schema/int/formulavariables",
            "children": false,
            "hasProjectEntityChildren": false,
            "isProjectEntity": false,
            "href": "/ivaap/api/v1/formulas/variables"
          },
          {
            "rel": "Formula Validation",
            "name": "Formula Validations",
            "relEntity": "v1/schema/int/formulavalidation",
            "children": false,
            "hasProjectEntityChildren": false,
            "isProjectEntity": false,
            "href": "/ivaap/api/v1/formulas/validation"
          }
        ]
      }
    ]
  },
  "metrics": {
    "startTime": "Tue Aug 05 21:05:59 GMT 2025",
    "startTimestamp": 1754427959274,
    "upTime": "13 Days, 20 Hours and 43 Minutes",
    "timestamp": 1755625750744
  }
}

3rd Party Tools

For convenience, we have added two alias to install the most commonly used 3rd party tools for IVAAP, which are jq and yq.

jq is a lightweight and flexible command-line JSON processor, and yq is essentially the same thing but for YAML. These allow for easier to read output parsing of JSON and YAML, as well as easy manipulation and modification of JSON/YAML configuration files. The aliases installyq and installjq will install them to your host as long as you have an external internet connection.

Image Retagging Script

For easy retagging, a script is included in the ivaap-helpers repository ( ivaap-helpers/image-retagging/retag-images.sh ). This script will load the container images from the provided tar files, retag for your own registry, and push. This script does require docker to be installed on the linux host you run the script on.

To use this script, first authenticate to your registry. This can vary depending on your registry. Below are some examples.

# AWS ECR (requires credentials with AWS CLI)
docker login -u AWS -p $(aws ecr get-login-password --region <region>) <registry_name>

# GitHub GHCR
export CR_PAT=<PAT> && echo $CR_PAT | docker login ghcr.io -u <github_organization> --password-stdin

# Azure ACR (requires appropriate permissions)
az login
az acr login -n <registry_name>

Once authenticated, create a directory called images next to the script.

user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ ls
retag-images.sh
user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ mkdir images
user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ ls
images  retag-images.sh

Now, place all image tar files from your delivery package into that new images directory.

user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ mv /opt/ivaap/docker-images.tar.gz images/.
user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ mv /opt/ivaap/mongonode-3.0-10.tar.gz images/.
user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ ls images/
docker-images.tar.gz  mongonode-3.0-10.tar.gz

You are now ready to run the script. You will be prompted to enter your base registry - enter the registry and press enter (Example: caspian.azurecr.io). For demonstration purposes, I will be pushing to an Amazon ECR named 245634265005.dkr.ecr.us-west-2.amazonaws.com.

user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ ./retag-images.sh 
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
This script will retag and push docker images to your own container registry.
Please ensure you have already authenticated with your registry before you begin, and that ALL image tar files have been placed in the 'images' directory.

Depending on your registry, the repos may need to be created first before running the script.

This script does require docker to be installed.
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Enter base URL for your container registry:
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
245634265005.dkr.ecr.us-west-2.amazonaws.com
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Loading docker images from tarfile.
This may take a few minutes...
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

This first step will take some time, as all of the images are being loaded into the docker daemon. Once this process is done, you will see the retagged images being pushed to your registry.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Tagging caspian.azurecr.io/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-3.4.1 for 245634265005.dkr.ecr.us-west-2.amazonaws.com
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Pushing 245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-3.4.1
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
The push refers to repository [245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-standard]
0a7be98f7edd: Pushed 
28234ebf3320: Pushed 
887b38688c47: Pushed 
c304906f3b8e: Pushed 
83d58edfe986: Pushed 
fe39040c91bd: Pushed 
888a7ec8f432: Pushed 
2634b1f040e6: Pushed 
cf49fdcee664: Pushed 
49fe10b02518: Pushed 
5ee585a3ee0b: Pushed 
0aedcea5d453: Pushed 
bc8c2c92c6d9: Pushed 
994456c4fd7b: Pushed 
ivaap-dashboard-standard-3.4.1: digest: sha256:d3516e0a04af47dd5d2796af76d7ce685193fc40492c81654b6c3922080aa840 size: 3450

Once complete, you will see this message:

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Success! All images were pushed to 245634265005.dkr.ecr.us-west-2.amazonaws.com
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  - caspian.azurecr.io/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-3.4.1
  - caspian.azurecr.io/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-external-3.4.1
  - caspian.azurecr.io/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-external-3.4.1
  - caspian.azurecr.io/ivaap/adminserver:adminserver-3.0.52-ff49516-eclipse-temurin-21-jdk-alpine-202511142248Z
  - caspian.azurecr.io/ivaap/backend/seednode:seednode-3.0-9-7a321bd-20251022T172754Z
  - caspian.azurecr.io/ivaap/backend/epsgnode:epsgnode-3.0-9-7a321bd-20251022T172754Z
  - caspian.azurecr.io/ivaap/frontend/admin-client:ivaap_admin-3.0.2
  - caspian.azurecr.io/ivaap/proxy:proxy-2025.x-cd95019f-20251107T140506Z
  - caspian.azurecr.io/ivaap/activemq:activemq-6.1.7-96e1cba9-202510050405Z
  - caspian.azurecr.io/ivaap/backend/messagingnode:messagingnode-3.0-9-7a321bd-20251022T172754Z
  - caspian.azurecr.io/ivaap/frontend/dashboard-standard:osdu-standard-external-3.4.1
  - caspian.azurecr.io/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-3.4.1
  - caspian.azurecr.io/ivaap/frontend/dashboard-publish:osdu-publish-external-3.4.1
  - caspian.azurecr.io/ivaap/backend/adminnode:adminnode-3.0-9-7a321bd-20251022T172754Z
  - caspian.azurecr.io/ivaap/backend/playnode:playnode-3.0-9-7a321bd-20251022T172754Z
  - caspian.azurecr.io/ivaap/backend/mqgatewaynode:mqgatewaynode-3.0-9-7a321bd-20251022T172754Z
  - caspian.azurecr.io/ivaap/backend/mongonode:mongonode-3.0-10-3a6e2fa-20251022T172754Z

A new text file will have been created as well. This file contains all of the new images that were pushed to your own registry. cat this file to see the full list.

user@linux:/opt/ivaap/ivaap-helpers/image-retagging$ cat new-image-list.txt 
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-3.4.1
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-standard:ivaap-dashboard-standard-external-3.4.1
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-external-3.4.1
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/adminserver:adminserver-3.0.52-ff49516-eclipse-temurin-21-jdk-alpine-202511142248Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/seednode:seednode-3.0-9-7a321bd-20251022T172754Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/epsgnode:epsgnode-3.0-9-7a321bd-20251022T172754Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/admin-client:ivaap_admin-3.0.2
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/proxy:proxy-2025.x-cd95019f-20251107T140506Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/activemq:activemq-6.1.7-96e1cba9-202510050405Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/messagingnode:messagingnode-3.0-9-7a321bd-20251022T172754Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-standard:osdu-standard-external-3.4.1
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-3.4.1
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-publish:osdu-publish-external-3.4.1
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/adminnode:adminnode-3.0-9-7a321bd-20251022T172754Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/playnode:playnode-3.0-9-7a321bd-20251022T172754Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/mqgatewaynode:mqgatewaynode-3.0-9-7a321bd-20251022T172754Z
245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/backend/mongonode:mongonode-3.0-10-3a6e2fa-20251022T172754Z

Some error handling has been added in case you receive an image that does not match the expected base registry. In the example below, the image was rejected because it does not match the expected base registry of caspian.azurecr.io.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Skipping image not from caspian.azurecr.io: 245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-3.4.1
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

ERROR The following images were not pushed to 245634265005.dkr.ecr.us-west-2.amazonaws.com:
  - 245634265005.dkr.ecr.us-west-2.amazonaws.com/ivaap/frontend/dashboard-publish:ivaap-dashboard-publish-3.4.1

If this occurs, please contact SLB for assistance.

This script, while a manual process, could be a good starting point to adapt into an automated retagging pipeline by hard coding your base registry and removing the user prompt.