let _concerns_lib = import "schemas/lib/concerns.ncl" in let _context_lib = import "schemas/catalog/context.ncl" in { CV = { context | _context_lib.ComponentContext | optional, name | String, namespace | String, catalog_ref | String | optional, image | String, image_tag | String | default = "latest", port | Number | default = 8080, # Optional command override — e.g. ["servcvgen", "-f", "/config/config.yaml"] # When absent the image CMD is used. command | Array String | optional, domain | String, dns_zone | String, acme_email | String, cluster_issuer | String, gateway_fip | String, gateway_name | String | default = "libre-wuji", gateway_ns | String | default = "kube-system", # Data PVC — CV data, templates, output, assets. pvc_name | String | default = "cv-home", pvc_mount | String | default = "/home", pvc_size | String | default = "2Gi", pvc_class | String | default = "longhorn-retain", # Config file mounted at {config_mount}/{config_filename}. # Non-sensitive content lives in catalog/components/cv/cluster/config.yaml.tmpl (git). # CV_JWT_KEY and CV_MAIL_PSWD are injected at deploy time from cv-jesusperez.sops.yaml. config_mount | String | default = "/config", config_filename | String | default = "config.yaml", requires | { storage | { size | String, persistent | Bool } | optional, ports | Array { port | Number, exposure | [| 'public, 'private, 'internal |] | default = 'public, } | default = [], credentials | Array String | default = [], } | default = {}, provides | { service | String | optional, port | Number | optional, endpoints | Array String | default = [], } | default = {}, operations | { install | Bool | default = true, update | Bool | default = true, delete | Bool | default = true, health | Bool | default = true, } | default = {}, live_check | { strategy | [| 'k8s_pods, 'http_get |] | default = 'k8s_pods, scope | [| 'cp_only, 'all_nodes |] | default = 'cp_only, } | default = {}, concerns | _concerns_lib.ServiceConcerns | optional, .. }, }