Dimensions
A key with no suffix is read as
.compute on a node and .storage on a volume.
Prefer the explicit suffix.
Register a rate
Full request and response schema: Register a custom provider for compute, and Register a custom disk provider for storage.id for each entry. That UUID is what you tag with.
Tag the resource
On Kubernetes, use labels:Key spellings
Some platforms reject the canonical key, and a label set on a cloud instance can reach the node in a rewritten form. CostGraph matches keys case-insensitively after replacing/, . and - with _, so every spelling below resolves to
the same pin.
Set whichever your tooling accepts.
Inheritance
Every object is priced in its own right. An object with no pin of its own takes the rate from the nearest scope above it, so tagging one node can price the volumes on it without tagging each one. The nearest pin wins, and each kind of object looks outward along its own path: A volume and its claim are separate objects and can carry different rates. A volume with no consumer has no node above it, so with no pin of its own it falls straight to attribute matching.A node is not in any namespace, so tagging a namespace never changes a node’s
own rate. It reaches the claims in that namespace.
What a pin changes
A pin decides the rate CostGraph uses to cost that resource, replacing attribute matching for that dimension. Nothing else about the resource changes: CPU and memory still come from the node’s capacity and size from the volume, because those are the billed quantities. A pin is how a resource gets a cost at all when CostGraph has nothing to match on, such as a bare-metal node with no cloud provider behind it.Change a rate
Re-POST the same entry with a newcost_per_hour. The ID is unchanged and every
tagged resource picks up the new rate from the next hour. Already-billed hours
keep the rate they were billed at.