Downstream client work for milo-os/inventory#34 — M6: Audit & query, under the physical-inventory enhancement datum-cloud/enhancements#713.
Context
The inventory operator (inventory.miloapis.com/v1alpha1) ships cluster-scoped CRDs — Region, Site, Cluster, Node, NetworkDevice, Link, Provider, Rack, Port, Cable, Circuit, VirtualMachine — on the Milo control plane. M6 makes them auditable (Activity capability) and queryable (printer columns, topology.* labels, field indexers). datumctl is the first operator-facing client.
Audience is staff / operators, not per-project consumers.
Goal
Confirm operators can discover, read, and audit inventory through datumctl — mostly via the existing kubectl-style surface, plus activity query. New code only where gaps exist.
Tasks
Depends on
Non-goals
- No project-scoped / consumer-facing inventory surfacing — operators only.
cc @scotwells
Downstream client work for milo-os/inventory#34 — M6: Audit & query, under the physical-inventory enhancement datum-cloud/enhancements#713.
Context
The inventory operator (
inventory.miloapis.com/v1alpha1) ships cluster-scoped CRDs —Region,Site,Cluster,Node,NetworkDevice,Link,Provider,Rack,Port,Cable,Circuit,VirtualMachine— on the Milo control plane. M6 makes them auditable (Activity capability) and queryable (printer columns,topology.*labels, field indexers).datumctlis the first operator-facing client.Audience is staff / operators, not per-project consumers.
Goal
Confirm operators can discover, read, and audit inventory through
datumctl— mostly via the existing kubectl-style surface, plusactivity query. New code only where gaps exist.Tasks
datumctl api-resourceslists all inventory kinds against a control plane with the CRDs installeddatumctl get <kind>/describe <kind>work and render the printer columns M6 defines (key refs, type, topology)--selector topology.inventory.miloapis.com/...=…returns assets by region/site/cluster/rackdatumctl activity query --filter "<CEL>"returns readable inventory timelines (verify against the ActivityPolicies M6 ships) — e.g. filterobjectRef.apiGroup == 'inventory.miloapis.com'Depends on
Non-goals
cc @scotwells