53 lines
1.9 KiB
Text
53 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],
|
||
|
|
},
|
||
|
|
}
|