provisioning-catalog/components/garage/nickel/contracts.ncl

99 lines
2.8 KiB
Text
Raw Normal View History

let _concerns_lib = import "schemas/lib/concerns.ncl" in
{
GarageBucket = {
name
| String
| doc "Bucket name created in Garage on install (idempotent)",
key_name
| String
| doc "Garage API key name granted read-write on this bucket; access/secret key printed once on first creation",
},
Garage = {
mode
| std.enum.TagOrString
| doc "Deployment mode — Garage is always a taskserv (StatefulSet)"
| default = 'taskserv,
version
| String
| doc "Garage release tag (git.deuxfleurs.fr/Deuxfleurs/garage releases)"
| default = "v2.3.0",
namespace
| String
| doc "K8s namespace for the Garage StatefulSet"
| default = "garage",
replicas
| std.number.Nat
| doc "StatefulSet replica count. 1 = single-node cluster (no inter-node replication)."
| default = 1,
replication_factor
| std.number.Nat
| doc "Garage data replication factor passed to the cluster layout. Must be <= replicas. 1 for single-node."
| default = 1,
storage_class_name
| String
| doc "StorageClass backing each Garage pod's data+meta PVC (e.g. hcloud-volumes for single-node attach, avoiding Longhorn replica placement on storage nodes)"
| default = "hcloud-volumes",
data_volume_size
| String
| doc "Per-pod PVC size for data_dir + metadata_dir"
| default = "10Gi",
s3_api_port
| std.number.Nat
| doc "Garage S3 API port"
| default = 3900,
admin_api_port
| std.number.Nat
| doc "Garage admin API port (bucket/key management)"
| default = 3903,
rpc_port
| std.number.Nat
| doc "Garage inter-node RPC port"
| default = 3901,
s3_region
| String
| doc "S3 region string Garage advertises; consumers must set this as their S3 client region"
| default = "garage",
secret_name
| String
| doc "Name of the K8s Secret in `namespace` holding GARAGE_RPC_SECRET and GARAGE_ADMIN_TOKEN — provisioned out-of-band (SOPS-managed), never generated by the install script"
| default = "garage-rpc-admin",
node_selector
| {_ : String}
| doc "nodeSelector for the Garage pod(s) — set at the infra layer, never baked into catalog defaults"
| default = {},
buckets
| Array GarageBucket
| doc "Buckets to create (idempotent) with their access keys on install"
| default = [],
operations
| { install: Bool, reinstall: Bool, delete: Bool, health: Bool }
| optional,
live_check
| { strategy: std.enum.TagOrString, scope: std.enum.TagOrString, namespace: String, selector: String }
| optional,
# ServiceConcerns umbrella (ADR-008).
concerns | _concerns_lib.ServiceConcerns | optional,
..
},
}