feat: add HTTP Management API, migrate CLI from Akka ClusterClient to HTTP

Replace the CLI's Akka.NET ClusterClient transport with a simple HTTP client
targeting a new POST /management endpoint on the Central Host. The endpoint
handles Basic Auth, LDAP authentication, role resolution, and ManagementActor
dispatch in a single round-trip — eliminating the CLI's Akka, LDAP, and
Security dependencies.

Also fixes DCL ReSubscribeAll losing subscriptions on repeated reconnect by
deriving the tag list from _subscriptionsByInstance instead of _subscriptionIds.
This commit is contained in:
Joseph Doherty
2026-03-20 23:55:31 -04:00
parent 7740a3bcf9
commit 1a540f4f0a
38 changed files with 863 additions and 758 deletions

View File

@@ -1,6 +1,6 @@
# ScadaLink CLI
Command-line tool for managing the ScadaLink SCADA system. Connects to a Central node via Akka.NET ClusterClient and routes commands through the ManagementActor.
Command-line tool for managing the ScadaLink SCADA system. Connects to a Central node via HTTP and routes commands through the Management API endpoint (`POST /management`), which dispatches to the ManagementActor. Authentication is handled server-side via LDAP.
## Installation
@@ -12,27 +12,23 @@ The output binary is `scadalink` (or `scadalink.exe` on Windows).
## Connection
Every command requires a connection to a running Central node. Contact points can be supplied three ways, evaluated in this priority order:
Every command requires a connection to a running Central node. The management URL can be supplied three ways, evaluated in this priority order:
1. `--contact-points` flag on the command line
2. `SCADALINK_CONTACT_POINTS` environment variable
3. `contactPoints` array in `~/.scadalink/config.json`
1. `--url` flag on the command line
2. `SCADALINK_MANAGEMENT_URL` environment variable
3. `managementUrl` field in `~/.scadalink/config.json`
```sh
scadalink --contact-points akka.tcp://scadalink@central-host:8081 <command>
scadalink --url http://central-host:5000 <command>
```
For a two-node HA cluster, supply both nodes comma-separated:
**Docker:** With the Docker setup, the Central UI (and management API) is available at `http://localhost:9001`:
```sh
scadalink --contact-points akka.tcp://scadalink@node1:8081,akka.tcp://scadalink@node2:8082 <command>
scadalink --url http://localhost:9001 <command>
```
**Docker (OrbStack):** When running against Docker containers, the contact point hostname must match the central container's Akka `NodeHostname` config. With OrbStack, add `/etc/hosts` entries mapping the container names to their IPs (see `docker/README.md`). Example:
```sh
scadalink --contact-points akka.tcp://scadalink@scadalink-central-a:8081 <command>
```
For HA failover, use a load balancer URL. The management API is stateless (Basic Auth per request), so any central node can handle any request without sticky sessions.
## Global Options
@@ -40,7 +36,7 @@ These options are accepted by the root command and inherited by all subcommands.
| Option | Description |
|--------|-------------|
| `--contact-points <value>` | Comma-separated Akka cluster contact point URIs |
| `--url <value>` | Management API URL (e.g., `http://localhost:9001`) |
| `--username <value>` | LDAP username for authentication |
| `--password <value>` | LDAP password for authentication |
| `--format <json\|table>` | Output format (default: `json`) |
@@ -51,29 +47,17 @@ These options are accepted by the root command and inherited by all subcommands.
```json
{
"contactPoints": ["akka.tcp://scadalink@central-host:8081"],
"ldap": {
"server": "ldap.company.com",
"port": 636,
"useTls": true,
"searchBase": "dc=example,dc=com",
"serviceAccountDn": "cn=admin,dc=example,dc=com",
"serviceAccountPassword": "secret"
},
"defaultFormat": "json"
"managementUrl": "http://localhost:9001"
}
```
The `searchBase` and `serviceAccountDn`/`serviceAccountPassword` fields are required for LDAP servers that need search-then-bind authentication (including the test GLAuth server). Without them, direct bind with `cn={username},{searchBase}` is attempted, which may fail if the user's DN doesn't follow that pattern.
For the Docker test environment, see `docker/README.md` for a ready-to-use config.
## Environment Variables
| Variable | Description |
|----------|-------------|
| `SCADALINK_CONTACT_POINTS` | Comma-separated contact point URIs (overrides config file) |
| `SCADALINK_LDAP_SERVER` | LDAP server hostname (overrides config file) |
| `SCADALINK_MANAGEMENT_URL` | Management API URL (overrides config file) |
| `SCADALINK_FORMAT` | Default output format (overrides config file) |
## Output
@@ -103,7 +87,7 @@ Exit codes:
List all templates with their full attribute, alarm, script, and composition definitions.
```sh
scadalink --contact-points <uri> template list
scadalink --url <url> template list
```
#### `template get`
@@ -111,7 +95,7 @@ scadalink --contact-points <uri> template list
Get a single template by ID.
```sh
scadalink --contact-points <uri> template get --id <int>
scadalink --url <url> template get --id <int>
```
| Option | Required | Description |
@@ -123,7 +107,7 @@ scadalink --contact-points <uri> template get --id <int>
Create a new template, optionally inheriting from a parent.
```sh
scadalink --contact-points <uri> template create --name <string> [--description <string>] [--parent-id <int>]
scadalink --url <url> template create --name <string> [--description <string>] [--parent-id <int>]
```
| Option | Required | Description |
@@ -137,7 +121,7 @@ scadalink --contact-points <uri> template create --name <string> [--description
Update an existing template's name, description, or parent.
```sh
scadalink --contact-points <uri> template update --id <int> [--name <string>] [--description <string>] [--parent-id <int>]
scadalink --url <url> template update --id <int> [--name <string>] [--description <string>] [--parent-id <int>]
```
| Option | Required | Description |
@@ -152,7 +136,7 @@ scadalink --contact-points <uri> template update --id <int> [--name <string>] [-
Delete a template by ID.
```sh
scadalink --contact-points <uri> template delete --id <int>
scadalink --url <url> template delete --id <int>
```
| Option | Required | Description |
@@ -164,7 +148,7 @@ scadalink --contact-points <uri> template delete --id <int>
Run pre-deployment validation on a template (flattening, naming collisions, script compilation).
```sh
scadalink --contact-points <uri> template validate --id <int>
scadalink --url <url> template validate --id <int>
```
| Option | Required | Description |
@@ -176,7 +160,7 @@ scadalink --contact-points <uri> template validate --id <int>
Add an attribute to a template.
```sh
scadalink --contact-points <uri> template attribute add --template-id <int> --name <string> --data-type <string> [--default-value <string>] [--tag-path <string>]
scadalink --url <url> template attribute add --template-id <int> --name <string> --data-type <string> [--default-value <string>] [--tag-path <string>]
```
| Option | Required | Description |
@@ -192,7 +176,7 @@ scadalink --contact-points <uri> template attribute add --template-id <int> --na
Update an attribute on a template.
```sh
scadalink --contact-points <uri> template attribute update --template-id <int> --name <string> [--data-type <string>] [--default-value <string>] [--tag-path <string>]
scadalink --url <url> template attribute update --template-id <int> --name <string> [--data-type <string>] [--default-value <string>] [--tag-path <string>]
```
| Option | Required | Description |
@@ -208,7 +192,7 @@ scadalink --contact-points <uri> template attribute update --template-id <int> -
Remove an attribute from a template.
```sh
scadalink --contact-points <uri> template attribute delete --template-id <int> --name <string>
scadalink --url <url> template attribute delete --template-id <int> --name <string>
```
| Option | Required | Description |
@@ -221,7 +205,7 @@ scadalink --contact-points <uri> template attribute delete --template-id <int> -
Add an alarm definition to a template.
```sh
scadalink --contact-points <uri> template alarm add --template-id <int> --name <string> --trigger-attribute <string> --condition <string> --setpoint <string> [--severity <string>] [--notification-list <string>]
scadalink --url <url> template alarm add --template-id <int> --name <string> --trigger-attribute <string> --condition <string> --setpoint <string> [--severity <string>] [--notification-list <string>]
```
| Option | Required | Description |
@@ -239,7 +223,7 @@ scadalink --contact-points <uri> template alarm add --template-id <int> --name <
Update an alarm definition on a template.
```sh
scadalink --contact-points <uri> template alarm update --template-id <int> --name <string> [--condition <string>] [--setpoint <string>] [--severity <string>] [--notification-list <string>]
scadalink --url <url> template alarm update --template-id <int> --name <string> [--condition <string>] [--setpoint <string>] [--severity <string>] [--notification-list <string>]
```
| Option | Required | Description |
@@ -256,7 +240,7 @@ scadalink --contact-points <uri> template alarm update --template-id <int> --nam
Remove an alarm definition from a template.
```sh
scadalink --contact-points <uri> template alarm delete --template-id <int> --name <string>
scadalink --url <url> template alarm delete --template-id <int> --name <string>
```
| Option | Required | Description |
@@ -269,7 +253,7 @@ scadalink --contact-points <uri> template alarm delete --template-id <int> --nam
Add a script to a template.
```sh
scadalink --contact-points <uri> template script add --template-id <int> --name <string> --trigger-type <string> [--trigger-attribute <string>] [--interval <int>] --code <string>
scadalink --url <url> template script add --template-id <int> --name <string> --trigger-type <string> [--trigger-attribute <string>] [--interval <int>] --code <string>
```
| Option | Required | Description |
@@ -286,7 +270,7 @@ scadalink --contact-points <uri> template script add --template-id <int> --name
Update a script on a template.
```sh
scadalink --contact-points <uri> template script update --template-id <int> --name <string> [--trigger-type <string>] [--trigger-attribute <string>] [--interval <int>] [--code <string>]
scadalink --url <url> template script update --template-id <int> --name <string> [--trigger-type <string>] [--trigger-attribute <string>] [--interval <int>] [--code <string>]
```
| Option | Required | Description |
@@ -303,7 +287,7 @@ scadalink --contact-points <uri> template script update --template-id <int> --na
Remove a script from a template.
```sh
scadalink --contact-points <uri> template script delete --template-id <int> --name <string>
scadalink --url <url> template script delete --template-id <int> --name <string>
```
| Option | Required | Description |
@@ -316,7 +300,7 @@ scadalink --contact-points <uri> template script delete --template-id <int> --na
Add a feature module composition to a template.
```sh
scadalink --contact-points <uri> template composition add --template-id <int> --module-template-id <int> --instance-name <string>
scadalink --url <url> template composition add --template-id <int> --module-template-id <int> --instance-name <string>
```
| Option | Required | Description |
@@ -330,7 +314,7 @@ scadalink --contact-points <uri> template composition add --template-id <int> --
Remove a feature module composition from a template.
```sh
scadalink --contact-points <uri> template composition delete --template-id <int> --instance-name <string>
scadalink --url <url> template composition delete --template-id <int> --instance-name <string>
```
| Option | Required | Description |
@@ -347,7 +331,7 @@ scadalink --contact-points <uri> template composition delete --template-id <int>
Get a single instance by ID.
```sh
scadalink --contact-points <uri> instance get --id <int>
scadalink --url <url> instance get --id <int>
```
| Option | Required | Description |
@@ -359,7 +343,7 @@ scadalink --contact-points <uri> instance get --id <int>
List instances, with optional filters.
```sh
scadalink --contact-points <uri> instance list [--site-id <int>] [--template-id <int>] [--search <string>]
scadalink --url <url> instance list [--site-id <int>] [--template-id <int>] [--search <string>]
```
| Option | Required | Description |
@@ -373,7 +357,7 @@ scadalink --contact-points <uri> instance list [--site-id <int>] [--template-id
Create a new instance of a template at a site.
```sh
scadalink --contact-points <uri> instance create --name <string> --template-id <int> --site-id <int> [--area-id <int>]
scadalink --url <url> instance create --name <string> --template-id <int> --site-id <int> [--area-id <int>]
```
| Option | Required | Description |
@@ -388,7 +372,7 @@ scadalink --contact-points <uri> instance create --name <string> --template-id <
Deploy an instance to its site. Acquires the per-instance operation lock.
```sh
scadalink --contact-points <uri> instance deploy --id <int>
scadalink --url <url> instance deploy --id <int>
```
| Option | Required | Description |
@@ -400,7 +384,7 @@ scadalink --contact-points <uri> instance deploy --id <int>
Enable a previously disabled instance.
```sh
scadalink --contact-points <uri> instance enable --id <int>
scadalink --url <url> instance enable --id <int>
```
| Option | Required | Description |
@@ -412,7 +396,7 @@ scadalink --contact-points <uri> instance enable --id <int>
Disable a running instance without deleting it.
```sh
scadalink --contact-points <uri> instance disable --id <int>
scadalink --url <url> instance disable --id <int>
```
| Option | Required | Description |
@@ -424,7 +408,7 @@ scadalink --contact-points <uri> instance disable --id <int>
Delete an instance. The instance must be disabled first.
```sh
scadalink --contact-points <uri> instance delete --id <int>
scadalink --url <url> instance delete --id <int>
```
| Option | Required | Description |
@@ -436,7 +420,7 @@ scadalink --contact-points <uri> instance delete --id <int>
Set data connection bindings for an instance's attributes.
```sh
scadalink --contact-points <uri> instance set-bindings --id <int> --bindings <json>
scadalink --url <url> instance set-bindings --id <int> --bindings <json>
```
| Option | Required | Description |
@@ -453,7 +437,7 @@ scadalink --contact-points <uri> instance set-bindings --id <int> --bindings <js
Get a single site by ID.
```sh
scadalink --contact-points <uri> site get --id <int>
scadalink --url <url> site get --id <int>
```
| Option | Required | Description |
@@ -465,7 +449,7 @@ scadalink --contact-points <uri> site get --id <int>
List all registered sites.
```sh
scadalink --contact-points <uri> site list
scadalink --url <url> site list
```
#### `site create`
@@ -473,7 +457,7 @@ scadalink --contact-points <uri> site list
Register a new site.
```sh
scadalink --contact-points <uri> site create --name <string> --identifier <string> [--description <string>]
scadalink --url <url> site create --name <string> --identifier <string> [--description <string>]
```
| Option | Required | Description |
@@ -487,7 +471,7 @@ scadalink --contact-points <uri> site create --name <string> --identifier <strin
Delete a site. Fails if any instances are assigned to it.
```sh
scadalink --contact-points <uri> site delete --id <int>
scadalink --url <url> site delete --id <int>
```
| Option | Required | Description |
@@ -499,7 +483,7 @@ scadalink --contact-points <uri> site delete --id <int>
Push compiled artifacts to one or all sites.
```sh
scadalink --contact-points <uri> site deploy-artifacts [--site-id <int>]
scadalink --url <url> site deploy-artifacts [--site-id <int>]
```
| Option | Required | Description |
@@ -511,7 +495,7 @@ scadalink --contact-points <uri> site deploy-artifacts [--site-id <int>]
List all areas for a site.
```sh
scadalink --contact-points <uri> site area list --site-id <int>
scadalink --url <url> site area list --site-id <int>
```
| Option | Required | Description |
@@ -523,7 +507,7 @@ scadalink --contact-points <uri> site area list --site-id <int>
Create an area within a site.
```sh
scadalink --contact-points <uri> site area create --site-id <int> --name <string> [--parent-area-id <int>]
scadalink --url <url> site area create --site-id <int> --name <string> [--parent-area-id <int>]
```
| Option | Required | Description |
@@ -537,7 +521,7 @@ scadalink --contact-points <uri> site area create --site-id <int> --name <string
Update an area's name or parent.
```sh
scadalink --contact-points <uri> site area update --id <int> [--name <string>] [--parent-area-id <int>]
scadalink --url <url> site area update --id <int> [--name <string>] [--parent-area-id <int>]
```
| Option | Required | Description |
@@ -551,7 +535,7 @@ scadalink --contact-points <uri> site area update --id <int> [--name <string>] [
Delete an area. Fails if any instances are assigned to it.
```sh
scadalink --contact-points <uri> site area delete --id <int>
scadalink --url <url> site area delete --id <int>
```
| Option | Required | Description |
@@ -567,7 +551,7 @@ scadalink --contact-points <uri> site area delete --id <int>
Deploy a single instance (same as `instance deploy`).
```sh
scadalink --contact-points <uri> deploy instance --id <int>
scadalink --url <url> deploy instance --id <int>
```
| Option | Required | Description |
@@ -579,7 +563,7 @@ scadalink --contact-points <uri> deploy instance --id <int>
Deploy compiled artifacts to one or all sites (same as `site deploy-artifacts`).
```sh
scadalink --contact-points <uri> deploy artifacts [--site-id <int>]
scadalink --url <url> deploy artifacts [--site-id <int>]
```
| Option | Required | Description |
@@ -591,7 +575,7 @@ scadalink --contact-points <uri> deploy artifacts [--site-id <int>]
Query deployment records, with optional filters and pagination.
```sh
scadalink --contact-points <uri> deploy status [--instance-id <int>] [--status <string>] [--page <int>] [--page-size <int>]
scadalink --url <url> deploy status [--instance-id <int>] [--status <string>] [--page <int>] [--page-size <int>]
```
| Option | Required | Default | Description |
@@ -610,7 +594,7 @@ scadalink --contact-points <uri> deploy status [--instance-id <int>] [--status <
Get a single data connection by ID.
```sh
scadalink --contact-points <uri> data-connection get --id <int>
scadalink --url <url> data-connection get --id <int>
```
| Option | Required | Description |
@@ -622,7 +606,7 @@ scadalink --contact-points <uri> data-connection get --id <int>
List all configured data connections.
```sh
scadalink --contact-points <uri> data-connection list
scadalink --url <url> data-connection list
```
#### `data-connection create`
@@ -630,7 +614,7 @@ scadalink --contact-points <uri> data-connection list
Create a new data connection definition.
```sh
scadalink --contact-points <uri> data-connection create --name <string> --protocol <string> [--configuration <json>]
scadalink --url <url> data-connection create --name <string> --protocol <string> [--configuration <json>]
```
| Option | Required | Description |
@@ -644,7 +628,7 @@ scadalink --contact-points <uri> data-connection create --name <string> --protoc
Update a data connection definition.
```sh
scadalink --contact-points <uri> data-connection update --id <int> [--name <string>] [--protocol <string>] [--configuration <json>]
scadalink --url <url> data-connection update --id <int> [--name <string>] [--protocol <string>] [--configuration <json>]
```
| Option | Required | Description |
@@ -659,7 +643,7 @@ scadalink --contact-points <uri> data-connection update --id <int> [--name <stri
Delete a data connection.
```sh
scadalink --contact-points <uri> data-connection delete --id <int>
scadalink --url <url> data-connection delete --id <int>
```
| Option | Required | Description |
@@ -671,7 +655,7 @@ scadalink --contact-points <uri> data-connection delete --id <int>
Assign a data connection to a site.
```sh
scadalink --contact-points <uri> data-connection assign --connection-id <int> --site-id <int>
scadalink --url <url> data-connection assign --connection-id <int> --site-id <int>
```
| Option | Required | Description |
@@ -684,7 +668,7 @@ scadalink --contact-points <uri> data-connection assign --connection-id <int> --
Remove a data connection assignment from a site.
```sh
scadalink --contact-points <uri> data-connection unassign --connection-id <int> --site-id <int>
scadalink --url <url> data-connection unassign --connection-id <int> --site-id <int>
```
| Option | Required | Description |
@@ -701,7 +685,7 @@ scadalink --contact-points <uri> data-connection unassign --connection-id <int>
Get a single external system definition by ID.
```sh
scadalink --contact-points <uri> external-system get --id <int>
scadalink --url <url> external-system get --id <int>
```
| Option | Required | Description |
@@ -713,7 +697,7 @@ scadalink --contact-points <uri> external-system get --id <int>
List all external system definitions.
```sh
scadalink --contact-points <uri> external-system list
scadalink --url <url> external-system list
```
#### `external-system create`
@@ -721,7 +705,7 @@ scadalink --contact-points <uri> external-system list
Register an external HTTP system that scripts can call.
```sh
scadalink --contact-points <uri> external-system create --name <string> --endpoint-url <url> --auth-type <string> [--auth-config <json>]
scadalink --url <url> external-system create --name <string> --endpoint-url <url> --auth-type <string> [--auth-config <json>]
```
| Option | Required | Description |
@@ -736,7 +720,7 @@ scadalink --contact-points <uri> external-system create --name <string> --endpoi
Update an external system definition.
```sh
scadalink --contact-points <uri> external-system update --id <int> [--name <string>] [--endpoint-url <url>] [--auth-type <string>] [--auth-config <json>]
scadalink --url <url> external-system update --id <int> [--name <string>] [--endpoint-url <url>] [--auth-type <string>] [--auth-config <json>]
```
| Option | Required | Description |
@@ -752,7 +736,7 @@ scadalink --contact-points <uri> external-system update --id <int> [--name <stri
Delete an external system definition.
```sh
scadalink --contact-points <uri> external-system delete --id <int>
scadalink --url <url> external-system delete --id <int>
```
| Option | Required | Description |
@@ -768,7 +752,7 @@ scadalink --contact-points <uri> external-system delete --id <int>
Get a single notification list by ID.
```sh
scadalink --contact-points <uri> notification get --id <int>
scadalink --url <url> notification get --id <int>
```
| Option | Required | Description |
@@ -780,7 +764,7 @@ scadalink --contact-points <uri> notification get --id <int>
List all notification lists.
```sh
scadalink --contact-points <uri> notification list
scadalink --url <url> notification list
```
#### `notification create`
@@ -788,7 +772,7 @@ scadalink --contact-points <uri> notification list
Create a notification list with one or more recipients.
```sh
scadalink --contact-points <uri> notification create --name <string> --emails <email1,email2,...>
scadalink --url <url> notification create --name <string> --emails <email1,email2,...>
```
| Option | Required | Description |
@@ -801,7 +785,7 @@ scadalink --contact-points <uri> notification create --name <string> --emails <e
Update a notification list's name or recipients.
```sh
scadalink --contact-points <uri> notification update --id <int> [--name <string>] [--emails <email1,email2,...>]
scadalink --url <url> notification update --id <int> [--name <string>] [--emails <email1,email2,...>]
```
| Option | Required | Description |
@@ -815,7 +799,7 @@ scadalink --contact-points <uri> notification update --id <int> [--name <string>
Delete a notification list.
```sh
scadalink --contact-points <uri> notification delete --id <int>
scadalink --url <url> notification delete --id <int>
```
| Option | Required | Description |
@@ -827,7 +811,7 @@ scadalink --contact-points <uri> notification delete --id <int>
Show the current SMTP configuration.
```sh
scadalink --contact-points <uri> notification smtp list
scadalink --url <url> notification smtp list
```
#### `notification smtp update`
@@ -835,7 +819,7 @@ scadalink --contact-points <uri> notification smtp list
Update the SMTP configuration.
```sh
scadalink --contact-points <uri> notification smtp update --host <string> --port <int> --auth-type <string> [--username <string>] [--password <string>] [--from-address <string>]
scadalink --url <url> notification smtp update --host <string> --port <int> --auth-type <string> [--username <string>] [--password <string>] [--from-address <string>]
```
| Option | Required | Description |
@@ -856,7 +840,7 @@ scadalink --contact-points <uri> notification smtp update --host <string> --port
List all inbound API keys.
```sh
scadalink --contact-points <uri> security api-key list
scadalink --url <url> security api-key list
```
#### `security api-key create`
@@ -864,7 +848,7 @@ scadalink --contact-points <uri> security api-key list
Create a new inbound API key. The generated key value is returned in the response and not stored in plaintext — save it immediately.
```sh
scadalink --contact-points <uri> security api-key create --name <string>
scadalink --url <url> security api-key create --name <string>
```
| Option | Required | Description |
@@ -876,7 +860,7 @@ scadalink --contact-points <uri> security api-key create --name <string>
Update an API key's name or enabled status.
```sh
scadalink --contact-points <uri> security api-key update --id <int> [--name <string>] [--enabled <bool>]
scadalink --url <url> security api-key update --id <int> [--name <string>] [--enabled <bool>]
```
| Option | Required | Description |
@@ -890,7 +874,7 @@ scadalink --contact-points <uri> security api-key update --id <int> [--name <str
Revoke and delete an API key.
```sh
scadalink --contact-points <uri> security api-key delete --id <int>
scadalink --url <url> security api-key delete --id <int>
```
| Option | Required | Description |
@@ -902,7 +886,7 @@ scadalink --contact-points <uri> security api-key delete --id <int>
List all LDAP group → role mappings.
```sh
scadalink --contact-points <uri> security role-mapping list
scadalink --url <url> security role-mapping list
```
#### `security role-mapping create`
@@ -910,7 +894,7 @@ scadalink --contact-points <uri> security role-mapping list
Map an LDAP group to a ScadaLink role.
```sh
scadalink --contact-points <uri> security role-mapping create --ldap-group <string> --role <string>
scadalink --url <url> security role-mapping create --ldap-group <string> --role <string>
```
| Option | Required | Description |
@@ -923,7 +907,7 @@ scadalink --contact-points <uri> security role-mapping create --ldap-group <stri
Update an LDAP role mapping.
```sh
scadalink --contact-points <uri> security role-mapping update --id <int> [--ldap-group <string>] [--role <string>]
scadalink --url <url> security role-mapping update --id <int> [--ldap-group <string>] [--role <string>]
```
| Option | Required | Description |
@@ -937,7 +921,7 @@ scadalink --contact-points <uri> security role-mapping update --id <int> [--ldap
Remove an LDAP role mapping.
```sh
scadalink --contact-points <uri> security role-mapping delete --id <int>
scadalink --url <url> security role-mapping delete --id <int>
```
| Option | Required | Description |
@@ -949,7 +933,7 @@ scadalink --contact-points <uri> security role-mapping delete --id <int>
List all site scope rules for role mappings.
```sh
scadalink --contact-points <uri> security scope-rule list [--role-mapping-id <int>]
scadalink --url <url> security scope-rule list [--role-mapping-id <int>]
```
| Option | Required | Description |
@@ -961,7 +945,7 @@ scadalink --contact-points <uri> security scope-rule list [--role-mapping-id <in
Add a site scope rule to a role mapping, restricting it to a specific site.
```sh
scadalink --contact-points <uri> security scope-rule add --role-mapping-id <int> --site-id <int>
scadalink --url <url> security scope-rule add --role-mapping-id <int> --site-id <int>
```
| Option | Required | Description |
@@ -974,7 +958,7 @@ scadalink --contact-points <uri> security scope-rule add --role-mapping-id <int>
Remove a site scope rule from a role mapping.
```sh
scadalink --contact-points <uri> security scope-rule delete --id <int>
scadalink --url <url> security scope-rule delete --id <int>
```
| Option | Required | Description |
@@ -990,7 +974,7 @@ scadalink --contact-points <uri> security scope-rule delete --id <int>
Return the current health state for all known sites as a JSON object keyed by site identifier.
```sh
scadalink --contact-points <uri> health summary
scadalink --url <url> health summary
```
#### `health site`
@@ -998,7 +982,7 @@ scadalink --contact-points <uri> health summary
Return the health state for a single site.
```sh
scadalink --contact-points <uri> health site --identifier <string>
scadalink --url <url> health site --identifier <string>
```
| Option | Required | Description |
@@ -1010,7 +994,7 @@ scadalink --contact-points <uri> health site --identifier <string>
Query the site event log for a specific site. Events are fetched remotely from the site's local SQLite store.
```sh
scadalink --contact-points <uri> health event-log --site-identifier <string> [--from <datetime>] [--to <datetime>] [--search <string>] [--page <int>] [--page-size <int>]
scadalink --url <url> health event-log --site-identifier <string> [--from <datetime>] [--to <datetime>] [--search <string>] [--page <int>] [--page-size <int>]
```
| Option | Required | Default | Description |
@@ -1027,7 +1011,7 @@ scadalink --contact-points <uri> health event-log --site-identifier <string> [--
Query parked (dead-letter) messages at a specific site.
```sh
scadalink --contact-points <uri> health parked-messages --site-identifier <string> [--page <int>] [--page-size <int>]
scadalink --url <url> health parked-messages --site-identifier <string> [--page <int>] [--page-size <int>]
```
| Option | Required | Default | Description |
@@ -1045,7 +1029,7 @@ scadalink --contact-points <uri> health parked-messages --site-identifier <strin
Request a point-in-time snapshot of a running instance's current attribute values and alarm states from the site. The instance must be deployed and enabled.
```sh
scadalink --contact-points <uri> debug snapshot --id <int>
scadalink --url <url> debug snapshot --id <int>
```
| Option | Required | Description |
@@ -1063,7 +1047,7 @@ The command resolves the instance's site internally and routes the request to th
Query the central audit log with optional filters and pagination.
```sh
scadalink --contact-points <uri> audit-log query [options]
scadalink --url <url> audit-log query [options]
```
| Option | Required | Default | Description |
@@ -1085,7 +1069,7 @@ scadalink --contact-points <uri> audit-log query [options]
List all shared script definitions.
```sh
scadalink --contact-points <uri> shared-script list
scadalink --url <url> shared-script list
```
#### `shared-script get`
@@ -1093,7 +1077,7 @@ scadalink --contact-points <uri> shared-script list
Get a single shared script by ID.
```sh
scadalink --contact-points <uri> shared-script get --id <int>
scadalink --url <url> shared-script get --id <int>
```
| Option | Required | Description |
@@ -1105,7 +1089,7 @@ scadalink --contact-points <uri> shared-script get --id <int>
Create a new shared script.
```sh
scadalink --contact-points <uri> shared-script create --name <string> --code <string>
scadalink --url <url> shared-script create --name <string> --code <string>
```
| Option | Required | Description |
@@ -1118,7 +1102,7 @@ scadalink --contact-points <uri> shared-script create --name <string> --code <st
Update a shared script's name or code.
```sh
scadalink --contact-points <uri> shared-script update --id <int> [--name <string>] [--code <string>]
scadalink --url <url> shared-script update --id <int> [--name <string>] [--code <string>]
```
| Option | Required | Description |
@@ -1132,7 +1116,7 @@ scadalink --contact-points <uri> shared-script update --id <int> [--name <string
Delete a shared script.
```sh
scadalink --contact-points <uri> shared-script delete --id <int>
scadalink --url <url> shared-script delete --id <int>
```
| Option | Required | Description |
@@ -1148,7 +1132,7 @@ scadalink --contact-points <uri> shared-script delete --id <int>
List all database connection definitions.
```sh
scadalink --contact-points <uri> db-connection list
scadalink --url <url> db-connection list
```
#### `db-connection get`
@@ -1156,7 +1140,7 @@ scadalink --contact-points <uri> db-connection list
Get a single database connection by ID.
```sh
scadalink --contact-points <uri> db-connection get --id <int>
scadalink --url <url> db-connection get --id <int>
```
| Option | Required | Description |
@@ -1168,7 +1152,7 @@ scadalink --contact-points <uri> db-connection get --id <int>
Create a new database connection definition.
```sh
scadalink --contact-points <uri> db-connection create --name <string> --connection-string <string> [--provider <string>]
scadalink --url <url> db-connection create --name <string> --connection-string <string> [--provider <string>]
```
| Option | Required | Description |
@@ -1182,7 +1166,7 @@ scadalink --contact-points <uri> db-connection create --name <string> --connecti
Update a database connection definition.
```sh
scadalink --contact-points <uri> db-connection update --id <int> [--name <string>] [--connection-string <string>] [--provider <string>]
scadalink --url <url> db-connection update --id <int> [--name <string>] [--connection-string <string>] [--provider <string>]
```
| Option | Required | Description |
@@ -1197,7 +1181,7 @@ scadalink --contact-points <uri> db-connection update --id <int> [--name <string
Delete a database connection definition.
```sh
scadalink --contact-points <uri> db-connection delete --id <int>
scadalink --url <url> db-connection delete --id <int>
```
| Option | Required | Description |
@@ -1213,7 +1197,7 @@ scadalink --contact-points <uri> db-connection delete --id <int>
List all inbound API method definitions.
```sh
scadalink --contact-points <uri> api-method list
scadalink --url <url> api-method list
```
#### `api-method get`
@@ -1221,7 +1205,7 @@ scadalink --contact-points <uri> api-method list
Get a single inbound API method by ID.
```sh
scadalink --contact-points <uri> api-method get --id <int>
scadalink --url <url> api-method get --id <int>
```
| Option | Required | Description |
@@ -1233,7 +1217,7 @@ scadalink --contact-points <uri> api-method get --id <int>
Create a new inbound API method.
```sh
scadalink --contact-points <uri> api-method create --name <string> --code <string> [--description <string>]
scadalink --url <url> api-method create --name <string> --code <string> [--description <string>]
```
| Option | Required | Description |
@@ -1247,7 +1231,7 @@ scadalink --contact-points <uri> api-method create --name <string> --code <strin
Update an inbound API method.
```sh
scadalink --contact-points <uri> api-method update --id <int> [--name <string>] [--code <string>] [--description <string>]
scadalink --url <url> api-method update --id <int> [--name <string>] [--code <string>] [--description <string>]
```
| Option | Required | Description |
@@ -1262,7 +1246,7 @@ scadalink --contact-points <uri> api-method update --id <int> [--name <string>]
Delete an inbound API method.
```sh
scadalink --contact-points <uri> api-method delete --id <int>
scadalink --url <url> api-method delete --id <int>
```
| Option | Required | Description |