Skip to main content

Product integration (gRPC / ownership)

Atlas is the shared storage control plane. Products call REST and/or gRPC (atlas.v1.AtlasStorage on ATLAS_GRPC_ADDR, lab NodePort 30512).

Owner convention​

CreateVolume accepts an Owner:

FieldExampleMeaning
producthyper2kvm, guestkit, aether, relay, kryton, zorvia, veyron, packetwolf, ragnarok, machina, hypersdk, zeusProduct id recorded in product_bindings
resource_typevm, datastore, volume, fleet, databaseProduct-side resource class
resource_idproduct UUID / nameProduct-side id
roleowner (default), consumer, data_diskBinding role

The product named Transiva is recorded as owner id hyper2kvm. That wire id is unchanged.

veyron, packetwolf, ragnarok, machina, hypersdk, and zeus are reserved owner ids for enterprise/future products that aren't public yet (see docs/ROADMAP.md's Slice 3+ section) — no integration exists to document below until one of those repos ships.

Enumerate owned volumes with ListVolumesByOwner(product, resource_id?).

Auth​

Same JWT hierarchy as REST: viewer < operator < admin. Product service accounts typically use product.service.<name> (maps to operator) minted via POST /api/atlas/v1/auth/token.

Surface today​

RPCNotes
HealthLiveness + version
ListClusters / ListPools / ListVolumes / GetVolumeInventory reads
CreateVolumeOperator; returns job_id + volume_id; optional Owner
DeleteVolumeAdmin; enqueues delete job
ExpandVolumeOperator; enqueues expand job (new_size_bytes must grow)
CreateSnapshot / ListSnapshotsOperator create; list optional volume_id filter
ListVolumesByOwnerProduct-scoped volume enumeration
GetJob / WatchJobJob status + server stream until terminal
ListJobsOptional state filter; limit default 50
ListTenantsTenants with volumes or quotas (id/name ← tenant_id)
ListAlertsOptional state filter
GetMetricsSummaryCapacity + client I/O + recovery rollup
ListBucketsRGW object-bucket inventory

Not yet on gRPC (REST-only): DR/mirroring, DataBridge, schedules, quotas admin, OSD ops, CephFS/NFS/ZFS specifics.

Relay (reliability control plane)​

Zyvor Relay keeps the event/job ledger in Postgres. Atlas owns the data disk PVC (and optional RGW backups), not the application rows.

FieldRelay convention
productrelay
resource_typedatabase
resource_idpostgres-primary
roledata_disk
Intentpolicy: "database" → RBD PVC (e.g. claim postgres-data in zyvor-relay)

Integration lives in the Relay repo: docs/ATLAS_STORAGE.md, scripts/atlas-provision-relay-storage.sh, k8s/postgres-atlas.example.yaml.

Service account: mint JWT subject product.service.relay (operator).

Kryton (Windows virtualization)​

Kryton runs Windows guests on KubeVirt. It discovers StorageClasses (optionally via Atlas) and stamps disk.storageClass on VM DataVolumes.

FieldKryton convention
productkryton
resource_typevm
resource_idKryton machine UUID
roledata_disk (boot / data PVC)

Configure from Kryton Settings → Integrations → Atlas (docs/ATLAS.md in the Kryton repo). Service account: mint JWT subject product.service.kryton (operator).

Probe from Kryton: POST /api/v1/integrations/atlas/test against Atlas /readyz + /api/atlas/v1/storage-classes.

Zorvia (KubeVirt VMs)​

Zorvia is the KubeVirt VM control plane. Atlas is optional and additive there — Zorvia keeps managing Rook-Ceph directly, and Atlas shows up as extra sections on Zorvia's existing Storage page (AtlasSection.tsx plus sibling AtlasRbdSection.tsx / AtlasBucketsSection.tsx / AtlasDrSection.tsx / AtlasAiSection.tsx / AtlasObservabilitySection.tsx / AtlasGovernanceSection.tsx) rather than a dedicated top-level page. Volumes created through it are tagged:

FieldZorvia convention
productzorvia
resource_typevm
resource_idZorvia VM name
roledata_disk (default)

Configure on the Zorvia server with ATLAS_URL (required to enable the integration), ATLAS_TOKEN (bearer JWT, product.service.zorvia), ATLAS_TENANT_ID, ATLAS_TIMEOUT_SECS, and ATLAS_TLS_INSECURE for self-signed labs. See docs/ATLAS_INTEGRATION.md in the Zorvia repo.

Fabric (Linux private cloud)​

Fabric's Storage page can manage Ceph RBD images for a pool by proxying through Atlas (fabric/docs/user/pages/infrastructure/storage-pools.md: "proxied through the Atlas storage control plane"). This is a thinner integration than Kryton/Zorvia — it proxies RBD image list/create/delete for an existing Ceph pool and doesn't go through the Owner/ product_bindings mechanism, so there's no product id to record for it yet.

Follow-ups (product repos)​

Generate/vendor stubs from crates/atlas-gateway/proto/atlas.proto into each product. Atlas does not ship per-product workflow code — only the shared edge.