8. Command Reference
Unless noted otherwise, all list/get commands are read-only and safe to run at any time.
8.1 realm
Alias: rlm. The realm is the VDURA cluster as a whole; there is only one, so this group has a single, argument-free verb.
| Command | Purpose |
|---|---|
realm get |
Show realm-wide state and configuration |
panctl realm get
panctl realm get -o 'jsonpath={.realm.state}'Requires the platform-admin role. Fields include state, locked, clientmode_current, heartbeat_period_seconds, volume_max_vols_realm, and more.
8.2 nodes
Aliases: node, no, n. Physical/virtual storage nodes in the realm, identified by their dataserial (not a name).
| Command | Purpose |
|---|---|
nodes list |
List all nodes |
nodes get <dataserial> |
Show one node’s details |
nodes reboot <dataserial> |
Reboot a node |
$ panctl nodes list
DATASERIAL IP ADDRESS STATUS ROLE STORAGESET ID CAPACITY BYTES
109a58fc3162ef 10.97.5.237 online vosd 0 55650025472
panctl nodes get 109a58fc3162ef
panctl nodes reboot 109a58fc3162efNotes: - A STORAGESET ID of 0 means the node isn’t assigned to a storage set yet. - reboot sends the request and returns immediately; there is no confirmation prompt.
8.3 storagesets
Aliases: storageset, ss, s. Pools of nodes that back tenant capacity and volumes.
| Command | Purpose |
|---|---|
storagesets list |
List all storage sets |
storagesets get <id> |
Show one storage set |
storagesets create --name <name> [--spares-requested <n>] |
Create a storage set |
storagesets update <id> -f <file> |
Update a storage set |
storagesets delete <id> |
Delete a storage set |
storagesets add-storage --storageset-id <id> --dataserials <a,b,c> [--mode add_spare\|migration] [--spares-requested <n>] |
Add nodes to a storage set |
panctl storagesets create --name "Demo Set" --spares-requested 4
panctl storagesets get 4
panctl storagesets add-storage --storageset-id 4 \
--dataserials 109a58fc3162ef,3f8889d66162f5 --spares-requested 2
panctl storagesets delete 4Notes: - --dataserials cannot be left empty on add-storage; an empty list would mean “add every unassigned node in the realm,” so PanCTL blocks it to prevent an accidental mass operation. - add-storage returns immediately, but absorbing new nodes into the set happens asynchronously in the background. Poll to confirm completion: bash until [ "$(panctl storagesets get 4 -o 'jsonpath={.storageset.nodes_online}')" = "6" ]; do sleep 5; done
8.4 tenants
Aliases: tenant, tn, tx, t. Tenants are the isolation boundary for users, capacity, and volumes.
| Command | Purpose |
|---|---|
tenants list |
List all tenants |
tenants get <tenant_id> |
Show one tenant |
tenants create --name <name> --short-name <name> --email <addr> [--auth-mode local\|pam] [--network ...] |
Create a tenant |
tenants update <tenant_id> -f <file> |
Update a tenant |
tenants delete <tenant_id> |
Delete a tenant (cascades to its volumes) |
tenants assign-storagesets --tenant <ref> --storageset-id <id> --quota <size> |
Grant/resize a tenant’s capacity in a storage set |
tenants unassign-storagesets --tenant <ref> --storageset-id <id> |
Remove a tenant’s access to a storage set |
tenants list-storagesets --tenant <ref> |
List storage sets assigned to a tenant |
tenants get-storageset --tenant <ref> --storageset-id <id> |
Show one tenant/storage-set assignment |
panctl tenants create --name FinTech --short-name fintech --email admin@fintech.example.com
panctl tenants assign-storagesets --tenant fintech --storageset-id 4 --quota 10GB
panctl tenants list-storagesets --tenant fintech
panctl tenants delete <tenant_id>Notes: - Multi-tenancy is not supported on InfiniBand. tenants create is refused with a 409 Conflict on a realm whose clients connect over InfiniBand, because tenant isolation needs VLAN or VXLAN encapsulation. Ethernet realms are not affected, and a realm that already runs without tenants is unchanged. - --tenant accepts either the tenant’s UUID or its short name; PanCTL resolves short names for you. - --short-name is 3–10 alphanumeric characters and cannot be changed after creation. - assign-storagesets acts as an “upsert”: if the tenant already has capacity in that storage set, this call resizes the quota instead of failing. - Creating a volume successfully is not, by itself, proof that assign-storagesets succeeded; confirm assignment separately with list-storagesets if you need to be certain. - tenants delete has no confirmation prompt and deletes the tenant’s volumes along with it.
8.5 volumes
Aliases: volume, vol, v. File-system volumes within your own tenant.
| Command | Purpose |
|---|---|
volumes list |
List volumes |
volumes get <volume_id> |
Show one volume |
volumes create --name <path> --storageset-id <id> --hard-quota <size> [options] |
Create a volume |
volumes update <volume_id> -f <file> |
Update quotas, recovery priority, etc. |
volumes rename <volume_id> -f <file> |
Rename (change the path of) a volume |
volumes delete <volume_id> |
Delete a volume |
panctl volumes create --name /data --storageset-id 1 --hard-quota 10GiB \
--soft-quota 8GiB --raid-type raid5+ --recovery-priority 1
echo '{"new_pathname":"/archive/volume1"}' | panctl volumes rename 3 -f -
echo '{"hard_quota_bytes":21474836480}' | panctl volumes update 3 -f -
panctl volumes delete 3create options:
| Flag | Notes |
|---|---|
--name <path> |
Required. A leading / is added automatically if missing. |
--storageset-id <id> |
Required. |
--hard-quota <size> |
Required by PanCTL (even though the API treats it as optional) so a limit is always chosen deliberately. 0 means unlimited. |
--soft-quota <size> |
Optional. 0 means unlimited. |
--raid-type <layout> |
Optional, cannot be changed after creation. |
--efsa-mode <mode> |
Optional. |
--recovery-priority <0-100> |
Optional; lower number = higher priority. |
Notes: - volumes create always creates the volume in your own tenant; there’s no --tenant flag on this command. - Before creating a volume, make sure: the target storage set has enough online capacity for the chosen RAID layout, your tenant has capacity assigned there (see tenants assign-storagesets), and your tenant has a subnet with an available address. - rename only changes the volume’s path; update changes everything else (quotas, priority) but not the path or RAID type.
8.6 subnets
Aliases: subnet, sub, sn. Per-tenant IP address ranges used by clients to reach volumes, plus their client attachments.
| Command | Purpose |
|---|---|
subnets list [--tenant <ref>] |
List subnets |
subnets get <subnet_id> |
Show one subnet |
subnets create --tenant <ref> --name <name> --cidr <addr/prefix> [options] |
Create a subnet |
subnets update <subnet_id> [options] |
Update a subnet |
subnets delete <subnet_id> |
Delete a subnet |
subnets attachments list <subnet_id> |
List client attachments on a subnet |
subnets attachments get <subnet_id> <attachment_id> |
Show one attachment |
subnets attachments create <subnet_id> --underlay-ip <ip> [options] |
Attach a client |
subnets attachments delete <subnet_id> <attachment_id> |
Remove an attachment |
panctl subnets create --tenant fintech --name fintech-net --cidr 10.71.0.0/16 \
--gateway 10.71.255.254 --mtu 9000 --range-start 10.71.0.1 --range-end 10.71.1.255
panctl subnets attachments create <subnet_id> --underlay-ip 10.128.9.0 --hostname client01
panctl subnets update <subnet_id> --mtu 1500
panctl subnets delete <subnet_id>Notes: - Size your CIDR generously; use at least a /16 for a tenant subnet, not a /24. Internal addressing places storage-node addresses 256 addresses into the range, and a /24 will silently strand them with no error message. - Subnets are identified by UUID, not a numeric ID. - Attachment create/delete are tenant-scoped operations; even a platform administrator must be logged in as a user of that tenant to manage attachments (a platform-admin session gets a permissions error, even though it can create/delete the subnet itself). - --segment-id, --tunnel-udp-port, and --addr-external can only be set at creation time.
8.7 users
Aliases: user, us, u. Human user accounts. All users are platform-level; there are no separate tenant users.
| Command | Purpose |
|---|---|
users list [--tenant <ref>] |
List users in a tenant |
users get <user_id> [--tenant <ref>] |
Show one user |
users create --tenant <ref> --username <name> [options] |
Create a user |
users update <user_id> --tenant <ref> -f <file> |
Update a user |
users delete <user_id> --tenant <ref> |
Delete a user |
users get-roles --user-id <id> --tenant <ref> |
Show a user’s roles |
users set-roles --user-id <id> --tenant <ref> --roles <a,b> |
Replace a user’s roles |
panctl users create --tenant fintech --username jsmith --email jsmith@fintech.example.com
panctl users set-roles --user-id <user_id> --tenant fintech --roles platform-read-only
panctl users get-roles --user-id <user_id> --tenant fintech
panctl users delete <user_id> --tenant fintechNotes: - If --tenant is omitted, PanCTL infers it from the short-name prefix of your own logged-in username. It’s safer to always pass --tenant explicitly in scripts. - set-roles replaces the entire role set, it does not add to it. Pass --roles '' to revoke all roles from a user. - There are no tenant roles. The only roles are platform-admin, platform-read-only, and storage-admin, and every user is a platform-level user. See 8.9 for what each role allows.
8.8 service-accounts
Alias: sa. Non-human accounts intended for automation, scoped to the platform rather than a tenant.
| Command | Purpose |
|---|---|
service-accounts list |
List service accounts |
service-accounts get <id> |
Show one service account |
service-accounts create --name <name> [--display-name <name>] [--description <text>] |
Create a service account |
service-accounts update <id> [options] |
Update display name/description |
service-accounts delete <id> |
Delete a service account |
service-accounts get-roles --sa-id <id> |
Show a service account’s roles |
service-accounts set-roles --sa-id <id> --roles <a,b> |
Replace a service account’s roles |
service-accounts tokens create --sa-id <id> --name <label> --expires-in-days <n> |
Mint an API token for the service account |
service-accounts tokens list --sa-id <id> [--active-only] |
List a service account’s tokens |
service-accounts tokens revoke <token_id> --sa-id <id> [--reason <text>] |
Revoke a token |
panctl service-accounts create --name ci-runner --display-name "CI Runner"
panctl service-accounts set-roles --sa-id <sa_id> --roles storage-admin
TOKEN=$(panctl service-accounts tokens create --sa-id <sa_id> --name ci --expires-in-days 90 -o jsonpath='{.token}')
PANCTL_API_SERVER=<server> panctl auth whoami --token "$TOKEN"Notes: - A service account’s --name is immutable after creation; only display name and description can be updated. - Available roles: platform-admin, platform-read-only, and storage-admin. See 8.9 for what each one allows. - This is the recommended pattern for giving an automation pipeline its own credentials, separate from any individual administrator’s login.
8.9 roles
Aliases: role, ro, r. A read-only catalogue of what each role is permitted to do.
There are no tenant roles. A user or service account holds one or more of these three platform roles:
| Role | What it allows |
|---|---|
platform-admin |
Full control. Create, update, and delete every resource (tenants, users, service accounts, StorageSets, volumes, S3 configuration, and more), change role assignments, and switch into a tenant. |
platform-read-only |
List and view every resource, and create or delete API tokens. |
storage-admin |
Everything platform-read-only allows, plus create, update, delete, and run actions on StorageSets and volumes. |
| Command | Purpose |
|---|---|
roles list |
Show all roles and their permitted actions |
$ panctl roles list
ROLE RESOURCE ACTIONS
platform-admin volumes list, view, create, update, delete, action
...
platform-read-only volumes list, view
...
storage-admin volumes list, view, create, update, delete, action
...
The sample output is abbreviated; the command lists every resource for every role, one row per role and resource pair.
Useful for confirming exactly what a role grants before assigning it to a user or service account.
8.10 s3
The S3-compatible object gateway. Some commands are realm-wide (platform administrators only) and some are per-tenant (--tenant <ref>).
Realm-wide configuration:
| Command | Purpose |
|---|---|
s3 enabled get / s3 enabled set <true\|false> |
Enable/disable the S3 gateway realm-wide |
s3 port-range get / s3 port-range set <start> <end> |
View/set the gateway’s port range |
s3 prefix get / s3 prefix set <path> |
View/set the realm-wide path prefix |
Per-tenant configuration:
panctl s3 get-config --tenant fintech
panctl s3 set-config --tenant fintech --enabled true --prefix /vol1/fintech \
--owner alice --group staff --dir-mode 0755 --obj-mode 0644
panctl s3 dns panfs --tenant fintech
panctl s3 tls renew --tenant fintechInstances (gateway processes running on specific nodes, identified by an instance ID iid):
panctl s3 instances list --tenant fintech
panctl s3 instances create abc12 <dataserial> --tenant fintech
panctl s3 instances start abc12 --tenant fintech
panctl s3 instances stop-all --tenant fintech
panctl s3 instances delete-all --tenant fintech --yesBuckets and credentials:
panctl s3 buckets create archive-2026 --tenant fintech
panctl s3 buckets list --tenant fintech
panctl s3 credentials reveal <access_key> --tenant fintech
panctl s3 credentials rotate <access_key> --tenant fintechNotes: - s3 instances delete-all requires --yes (this is the only destructive command in PanCTL that enforces an explicit confirmation flag). - credentials reveal returns the current secret without changing it; credentials rotate generates a brand-new secret (the old one stops working immediately). Both print the secret in plain text, so handle the output carefully.
8.11 events
Aliases: ev, e. Recent system events (read-only).
panctl events list
panctl events list --limit 25
panctl events list --tenant fintechShows up to 200 of the most recent events (--limit accepts 1–200); this is the exact same feed shown in the web UI.
8.12 alerts
Alias: al. Currently active alerts (read-only, no flags).
panctl alerts listThis shows a live snapshot of active alerts (not a historical log), the same set that drives the alert badge in the web UI.
8.13 audit
Aliases: aud, ad. The administrative audit log (read-only).
panctl audit list
panctl audit list --tenant fintech --since 2h
panctl audit list --user <user_id> --only create,delete
panctl audit list --since 2026-09-04T22:00:00Z --until 2026-09-04T23:59:59Z
panctl audit get <request_id>| Flag | Purpose |
|---|---|
--tenant <ref> |
Filter to one tenant |
--user <user_id> |
Filter to one user |
--only <a,b> / --skip <a,b> |
Include or exclude specific action types |
--since / --until |
Relative (2h, 2d) or absolute (RFC-3339) time bounds |
--limit <n> |
Maximum records to return (no upper cap, unlike events) |
audit get <request_id> drills into a single request; for a failed request, it also prints diagnostic details and relevant backend log lines.