Skip to main content
A resource running outside a supported cloud has no instance type, region or provider ID for CostGraph to price against. Instead of inventing those, tag the resource with the ID of a rate you registered in the pricing marketplace. A pricing ID is per dimension, so one object can carry a compute rate and a storage rate at the same time:
Register a rate once, then tag every resource that bills at it: The same ID can be tagged onto as many resources as bill at that rate, and changing the rate reprices all of them at once.

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.
A disk rate takes capacity bounds instead of CPU and memory:
The response carries an id for each entry. That UUID is what you tag with.

Tag the resource

On Kubernetes, use labels:
Review what is tagged with:
Pins are read from Kubernetes objects: nodes, volumes and volume claims. A tagged resource needs no other metadata. CPU and memory still come from the node’s capacity, and volume size from the PV, because those are the billed quantities.

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 new cost_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.
Changing region, instance_type or period_billing_hours creates a new rate with a new ID, because those describe a different SKU. Re-tag the affected resources with the new ID.

Share a rate

Anyone holding the ID can tag with it, which is how a provider prices the clusters they sell to. Only your own organisation’s rates are listed back to you, so treat an ID as a secret you hand out deliberately.

Fix a mistake

Re-tag with the correct ID and the change applies on the next sync. Remove a Kubernetes label with a trailing hyphen:
Removing the tag removes the pin. The resource falls back to a pin inherited from an ancestor, then to normal attribute matching. If the ID is malformed, or names a rate that has been deleted, CostGraph logs a warning naming the resource and the value, and leaves that dimension unpriced. It never falls back to attribute matching to cover for a bad ID.