Skip to main content

Configure OpenLM LicOps

To start admitting jobs, connect LicOps to OpenLM Platform, and then confirm that it lists your license pools. Seat counts, server health, rules, and reservations all come from OpenLM Platform, so nothing else works until the connection succeeds.

Connect LicOps to OpenLM Platform​

LicOps signs in to OpenLM Platform with the credentials of an identity client whose Client Type is Router. A failover Router uses the same client type.

Get the authorization file​

To get the authorization file:

  1. In OpenLM Platform, select Navigation, then Identity under Platform Administration.

  2. Select Authorization, then Add Client.

  3. In Select Client Type, select Router.

  4. Enter a description.

  5. Leave Encrypted authorization client cleared.

  6. Select Save.

    Add Client Type page in Identity with Router selected as the client type, a description entered, and Encrypted authorization client cleared LicOps signs in with a client of type Router, the same as a failover Router.

  7. Download the authorization file, a JSON file such as router-authorization.json.

The file holds the three values LicOps needs: the Base URL of your OpenLM Platform, the Client ID, and the Client Secret. If you no longer hold the secret, select the client on the Authorization page, and then select Reset Secret. The previous secret stops working. For more about authorization files, see Identity.

Use a client whose type is Router. A credential of another type can sign in, and OpenLM Platform still refuses the queries LicOps makes. The problem appears later as missing pools rather than as a sign-in failure.

Enter the credentials​

To enter the credentials in the Router UI:

  1. Open http://<licops-host>:8101/router-management/ to reach Platform Connection.

    Replace <licops-host> with the host that runs LicOps.

  2. Select Import Auth File, and then select the authorization file.

  3. To enter the values by hand instead, fill in Base URL, Client ID (Optional), and Client Secret (Optional).

    Always fill in all three fields. Leave Request Timeout (seconds) at 30.

  4. Select Check Connection, and then select Save.

Platform Connection page of the Router UI, showing the Connection Details form with Base URL, Client ID, Client Secret and Request Timeout fields, and the Check Connection and Import Auth File buttons The Router UI is the same for LicOps and for a failover Router. Until the connection works, an error notice under the form gives the reason.

Wait about 10 seconds after you save, and then check that no error notice appears under the form. No notice means the Router is syncing with OpenLM Platform. If the notice stays, it names the reason. See Troubleshooting.

To script the connection instead, run this command to send the same three values to the Router API:

curl -X PUT http://localhost:8100/api/v1/admission-controller/platform-credentials \
-H "Content-Type: application/json" \
-d '{
"baseUrl": "https://platform.example.com",
"clientId": "<client-id>",
"clientSecret": "<client-secret>",
"requestTimeoutSeconds": 30
}'

The Router UI and the REST API work the same way as for a failover Router. For every field and the connection check, see Configure OpenLM Router.

Confirm LicOps is running in LicOps mode​

When LicOps first syncs, it registers itself with OpenLM Platform as a LicOps Router, and OpenLM Platform creates its starting configuration: a listen port, 30001, which matters only if you route checkouts through LicOps, and session affinity turned off. LicOps collects that configuration on its next sync. Confirm it took effect:

curl http://localhost:8100/api/v1/status
{
"status": "ok",
"listenPorts": [30001],
"message": "Load balancer mode active",
"configurationManagement": {
"shape": "serviceManaged",
"lastSync": {
"lastSuccessfulSync": "2026-10-15T13:36:02Z",
"lastAppliedConfigVersion": 1,
"lastFailure": null
}
}
}

"message": "Load balancer mode active" confirms a LicOps Router. A Router that reports port mappings or pairStatuses instead was started in failover mode. See Troubleshooting.

In OpenLM Platform, the same configuration appears in LicOps Configuration, the app that configures both OpenLM LicOps and a failover OpenLM Router. To open it:

  1. Select Navigation, then LicOps Configuration under Licenses and Features.
  2. Select LicOps, and then read the listen ports and the session-affinity policy the Router runs on.

LicOps page in LicOps Configuration showing the listen port 30001 and the session affinity settings The LicOps page appears only for a Router in LicOps mode. A failover Router shows Port Mappings instead.

The LicOps page is for reference: you do not edit the listen port or session affinity there. If you need different values, contact OpenLM Support.

If LicOps Configuration shows the message that no Router has reported, the Router hasn't synced with OpenLM Platform. Wait about 10 seconds after you connect it, and then reload the page. The page doesn't refresh by itself.

Check that LicOps lists your license pools​

LicOps admits jobs only against the pools it has built from the license servers and features of OpenLM Platform. To list them, run this command:

curl http://localhost:8100/api/v1/stats
[
{ "serverId": 42, "host": "lic01.example.com", "port": "27000", "vendor": "MLM", "feature": "MATLAB",
"total": 50, "used": 31, "reserved": 2, "free": 17, "isHealthy": true, "activeSessions": 0 },
{ "serverId": 43, "host": "lic02.example.com", "port": "27000", "vendor": "MLM", "feature": "MATLAB",
"total": 50, "used": 28, "reserved": 0, "free": 22, "isHealthy": true, "activeSessions": 0 }
]

Each license server in each pool has one row. The following table explains the fields:

FieldWhat it means
vendor, featureThe pool's name. These are the exact strings every request to LicOps must send, including their case.
totalThe seats the license server grants for the feature.
usedThe seats the license server reports checked out, as of the last reading by OpenLM Platform.
reservedThe seats LicOps has admitted on this server that are not checked out yet.
freeWhat a new request can still get here: total − used − reserved.
isHealthyWhether OpenLM Platform reports the server as up. LicOps never places a seat on an unhealthy server.

A license server appears in this list only if OpenLM Platform monitors it through the OpenLM Broker on that server. If a server or a whole pool is missing, see System requirements.

Copy the vendor and feature names from this list rather than entering them. A request whose names match no pool is denied as NoServerAvailable, which reads like a shortage of servers rather than a spelling mistake.

If the list is empty ([]), LicOps has no pools, and every request is denied. Allow about 10 seconds after you connect, then check the connection as described in Troubleshooting.

Run a test admission​

Before you connect a scheduler, send one job's worth of requests by hand. Use a pool from the list in the previous section:

SID=$(uuidgen)

# Ask for one seat.
curl -s -X POST http://localhost:8100/api/v1/admission-controller/admit \
-H 'Content-Type: application/json' \
-d "{\"sessionId\":\"$SID\",\"vendor\":\"MLM\",\"feature\":\"MATLAB\",\"totalQuantity\":1}"

# Ask which server to check out from.
curl -s -X POST http://localhost:8100/api/v1/admission-controller/dispatch \
-H 'Content-Type: application/json' \
-d "{\"sessionId\":\"$SID\",\"executionNodeIp\":\"127.0.0.1\"}"

# Give the seat back.
curl -s -X POST http://localhost:8100/api/v1/admission-controller/release \
-H 'Content-Type: application/json' \
-d "{\"sessionId\":\"$SID\"}"

Check that the three answers are "decision": "Admit", then a licenseFile such as 27000@lic01.example.com, then "state": "Released". Between the first and the last request, the pool's reserved count in /api/v1/stats is one higher. If admit answers "decision": "Deny", its reason field gives the cause. See API reference.

Next steps​

For your next tasks, see these pages:

The documentation team might draft this page using a large language model. A technical writer reviews every page and verifies it against the product before publishing it. A human makes the final decision.