DPU Endpoints#
ClusterWareAI ™ DPU primitives represent Data Processing Units (DPUs) attached to compute nodes. Compute nodes can optionally have one or more DPUs. The ClusterWareAI software can PXE boot and deploy images to DPUs.
ClusterWareAI DPU support is available for NVIDIA BlueField-3 DPUs with DOCA. Additional support may be added in future releases. Contact Penguin Computing to discuss alternative requirements.
When issuing requests, the UID field in the URL can be the actual UID of
the primitive, the generated name of the primitive as given in the "name"
field, the MAC address, the assigned IP address, the hostname, or the fully
qualified hostname. For example, once a DPU, n4, is created, it can be
referenced through /dpu/n4, /dpu/<UID>, /dpu/<MAC>, or
/dpu/<IP>.
Data Fields#
DPU primitives can have several fields:
name
Assigned by the software: The name is computed from the naming pool
pattern and the DPU's index.
description
Optional: A text string with descriptive information.
type
Assigned by the software: Always set to ``dpu``. The type is fixed and
cannot be modified after creation.
mac
Required: Every DPU must have a MAC address. The MAC address must be
unique across compute nodes, switches, and DPUs.
host
Required: The compute node host for this DPU provided by node name, UID,
or other identifier.
attributes
Optional: A set of key-value pairs assigned to the DPU. Use these
attributes when configuring the DPU at boot time.
groups
Optional: An ordered list of Attribute Groups that this DPU belongs to.
attributes from each group are applied (overwritten) based on the order
of the groups.
naming_pool
Optional: A naming pool may be assigned and used to calculate the DPU's
name, index, and IP address.
index
Assigned by the software; the index (integer) is computed based on
the naming pool
ip
Assigned by the software; the IP address is computed based on the naming
pool
power_uri
Optional: A URI used by power-control helpers. The URI can be a template
with bracketed fields that are substituted from the DPU's attributes,
status, or hardware values.
redfish_uri
Optional
cmdline
Optional: Kernel command-line override for DPU boot workflows.
Additional Endpoints#
Several collection endpoints provide lookup and selection helpers for known DPUs:
GET /dpus/bymac/<part>
Returns DPU UIDs based on a partial MAC-address match.
GET /dpus/byip/<part>
Returns DPU UIDs based on a partial assigned-IP match.
GET /dpus/byindex/<index>
Returns DPU UIDs based on index.
GET /dpus/select/<expr>
Returns DPU UIDs selected by an expression.
GET /dpus/rescan
Rescans the database to check DPU indices.
Several endpoints provide finer-grained access to the list of Attribute Groups that the DPU belongs to:
GET /dpu/<UID>/groups
Returns the ordered list of Attribute Groups applied to the DPU.
POST /dpu/<UID>/groups
Appends one group key or a list of group keys to the current group list.
DELETE /dpu/<UID>/groups
Removes one group key or a list of group keys from the current group
list.
Several endpoints provide finer-grained access to the attributes assigned to a specific DPU. DPUs inherit attributes from all groups that they belong to and overwrite them with any DPU-specific attributes:
GET /dpu/<UID>/attributes
Returns a JSON object with the effective attributes for this DPU. If
``fmt=ini`` is supplied, the response is returned as plaintext INI-style
content instead of JSON.
PUT /dpu/<UID>/attributes
Replaces the current set of DPU-specific attributes with the sent data.
PATCH /dpu/<UID>/attributes
Updates the current set of DPU-specific attributes with the sent data.
DELETE /dpu/<UID>/attributes
Accepts one key or a list of keys to remove from the DPU-specific
attributes. If an attribute is set by an Attribute Group, it will still be
present in the DPU's overall list of attributes.
Several endpoints support boot, power, status, reachability, and command
execution workflows. Hard BMC-style actions such as power on, power off,
cycle, and reset are not valid directly on DPUs. Include "host": true
in PUT /dpu/<UID>/power_state requests to run power actions against the host
compute node. Use ?host=true with GET /dpu/<UID>/power_state to query
the host compute node's power state.
PUT /dpu/<UID>/bootdev
Sets the next boot device. The request body must contain ``bootdev`` with
one of ``none``, ``pxe``, ``disk``, or ``bios``.
GET /dpu/<UID>/power_uri
Returns a JSON object with ``unparsed`` and ``parsed`` power URI data
after substitutions have been applied.
GET /dpu/<UID>/power_state
Returns the power state of the host. For a DPU, requires the ``host=true``
query parameter to return the host node's power state.
PUT /dpu/<UID>/power_state
Requests a power-state action. The request body may contain ``state`` or
``steps``, plus optional ``force`` and ``host`` boolean fields.
GET /dpu/<UID>/status
Returns the most recent DPU status information.
GET /dpu/<UID>/ping
Checks whether the DPU is reachable.
PUT /dpu/<UID>/exec
Executes a command on the DPU. The request body must contain ``cmd`` and
may contain ``stdin``. The response is an ``application/octet-stream``
stream with raw command output, not a JSON object with ``success`` and
``data`` keys.
The DPU status and attribute reporting endpoints mirror the machine status reporting system used by compute nodes:
PUT /dpu/putstatus
Updates status information from the acting DPU. This endpoint is exposed
as a public endpoint and identifies the caller from the request
connection. If ``fmt=ini`` is supplied, the response is plaintext.
POST /dpu/putstatus
Administratively assigns DPU status or hardware data. The request body
includes the target ``uid`` field plus status and/or hardware data.
PUT /dpu/putattribs
Updates attributes from the acting DPU. This endpoint is exposed as a
public endpoint and identifies the caller from the request connection.
DPU state map endpoints are also available for workflows that wait for groups of DPUs to reach selected states:
POST /dpus/waitfor
Uploads a set of states that can be watched for changes.
GET /dpus/waitfor/<name>
Returns the named state map.
PUT /dpus/waitfor/<name>
Keeps the named state map active and returns current matching DPU lists.
DELETE /dpus/waitfor/<name>
Deletes the named state map.
GET /dpus/waitfor/<name>/dpus
Returns the current DPU lists for entries in the state map.
Example#
Create a new DPU attached to host node n1:
curl -X POST https://head1.cluster.local/api/v1/dpus \
--data '{"host":"n1", "mac":"22:33:44:55:66:77"}' \
-H "Authorization: Bearer <access_token>"
{"success": true, "data": "4b1fe139f7d64d14a8b4e7fbe675ce15"}
Verify the DPU data using the returned UID:
curl -X GET https://head1.cluster.local/api/v1/dpu/4b1fe139f7d64d14a8b4e7fbe675ce15 \
-H "Authorization: Bearer <access_token>"
{"success": true, "data": {"mac": "22:33:44:55:66:77", \
"host": "341b9947f6e644b78f6d88f5d7f898f4", "attributes": {}, "index": 4, \
"ip": "192.168.122.104", "type": "dpu", "uid": "4b1fe139f7d64d14a8b4e7fbe675ce15", \
"groups": [], "hardware": {}, "power_uri": null, "name": "n4", \
"hostname": "n4", "domain": "cluster.local"}}
Since DPUs can be referenced by name or MAC address, the same information is available using:
curl -X GET https://head1.cluster.local/api/v1/dpus/22:33:44:55:66:77 \
-H "Authorization: Bearer <access_token>"
Set the DPU to boot from PXE on its next boot:
curl -X PUT https://head1.cluster.local/api/v1/dpu/n4/bootdev \
--data '{"bootdev":"pxe"}' \
-H "Authorization: Bearer <access_token>"
{"success": true}
Power cycle the DPU's host compute node:
curl -X PUT https://head1.cluster.local/api/v1/dpu/n4/power_state \
--data '{"state":"cycle", "host": true}' \
-H "Authorization: Bearer <access_token>"
{"success": true, "data": "cycle"}