The DAOS Management Tool is a system administration application for DAOS.
Unlike other DAOS client applications that require authentication through
DAOS agent, dmg
is capable of authenticating directly through local
certificates.
The management tool has limited software dependencies as tasks are performed on remote servers over RPC and as such is suitable to be run from a login node.
The go-flags package is used
to implement a commandline interface. Command tree is built starting
with top-level commands defined in the cliOptions
struct defined in
main.go
, subcommands are then defined in functionality specific
files as described below. Desired behavior on (sub-)command execution
is then defined in the subcommand type's Execute
method.
Local certificate locations can be specified in the client config file.
For more details on how certificates are used within DAOS, see the Security documentation.
The management tool is a gRPC client and uses the
control API to interact with multiple
daos_server
processes
in parallel. The control API invokes RPCs to daos_server
instances,
each of which run a listening gRPC server that hosts the control
service.
Communications take place over the management network and addresses
of remote storage servers to connect to can be specified as a
LLNL-style hostlist (compact representation for a number of
similarly-named hosts, e.g. foo[1-1024]
, bar[35,42,55-64]
, etc)
on the commandline or in the
client config file.
For details on how gRPC communications are secured and authenticated, see the Security documentation.
The dmg
man page can be automatically updated when adding or
modifying commands by running
go test -v -run TestDmg_ManPageIsCurrent -args --update
, unit
tests will fail if this isn't run.
Implementation in man_test.go
.
The functionality provided by the management tool is split into domains which map to individual subcommands.
For exhaustive subcommand listings please see output of
dmg [<subcommand>] --help
.
Provides capability to automatically generate recommended server
config file for a given set of hosts.
Implementation in auto.go
.
Provides capability to change the owner of a DAOS container.
Implementation in cont.go
.
Firmware related capabilities are selectively compiled and may not
be present in all builds. Provided capability to query and update
firmware on NVMe and PMem devices.
Implementation with firmware enabled in firmware.go
. When
disabled: firmware_disabled.go
.
Provides capability to manage and enumerate available network devices. Implementation in network.go.
Provides capability to create, destroy and manage DAOS storage pools
including ability to manage individual properties and pool Access
Control Lists. Online Server Addition related commands provide
capability drain, evict, exclude, extend and reintegrate.
Implementation in pool.go
and ACL functionality and helpers in
acl.go
.
Provides capability to scan available storage devices, provision
relevant hardware and format allocated storage for use with DAOS.
Implementation in storage.go
.
The capability to run queries on a particular device as well as
setting particular device properties is also provided.
Sub-commands of dmg storage query ...
are implemented in
storage_query.go
.
Provides capability to query system members/ranks that have
previously joined the DAOS system. Additionally perform controlled
stop and start on members/ranks recorded in the system membership.
Implementation in system.go
.
Unit tests are provided for each functionality file (filename
suffixed with _test.go
). Command syntax is verified by tests
that call into helper methods within command_test
. Command
handlers are automatically checked to verify meaningful output is
provided when the --json
flag is set.