provisioning/schemas/lib/storage_config.ncl

52 lines
1.9 KiB
Text

# schemas/lib/storage_config.ncl — StorageConfig contracts
#
# Library file — import only, not directly exportable.
#
# Usage (component contracts.ncl):
# let sc = import "schemas/lib/storage_config.ncl" in
# requires | { storage | sc.StorageRequires | optional, ... }
#
# Usage (provider metadata.ncl or capabilities.ncl):
# let sc = import "schemas/lib/storage_config.ncl" in
# storage_policy | sc.ProviderStoragePolicy = sc.HetznerCSIPolicy
{
VolumeMode = [| 'block, 'nfs, 'object |],
ExpansionPolicy = [| 'static, 'expand_only, 'full |],
# Contract for component requires.storage — what a component declares it needs.
StorageRequires = {
size | String,
persistent | Bool | default = true,
volume_mode | VolumeMode | default = 'block,
access_mode | String | default = "ReadWriteOnce",
storage_class | String | optional,
},
# Abstract contract for provider storage policies.
# Concrete policies (HetznerCSIPolicy, etc.) must supply all fields.
ProviderStoragePolicy = {
provider | String,
min_size | String | default = "1Gi",
max_size | String | optional,
expansion_policy | ExpansionPolicy | default = 'static,
volume_modes | Array VolumeMode | default = ['block],
},
# Hetzner hcloud-volumes: minimum 10Gi, expand-only (no shrink via CSI).
HetznerCSIPolicy | ProviderStoragePolicy = {
provider = "hcloud-volumes",
min_size = "10Gi",
expansion_policy = 'expand_only,
volume_modes = ['block],
},
# democratic-csi NFS: fine-grained sizing, full expand/shrink, RWX capable.
DemocraticCSINFSPolicy | ProviderStoragePolicy = {
provider = "democratic-csi-nfs",
min_size = "1Gi",
expansion_policy = 'full,
volume_modes = ['nfs],
},
}