let appName = "overseerr"; appImage = "sctx/overseerr"; in { kubernetes.resources.services.overseerr = { spec = { selector.app = appName; ports.http = { port = 5055; targetPort = 5055; }; }; }; kubernetes.resources.statefulSets.overseerr.spec = { selector.matchLabels.app = appName; serviceName = appName; template = { metadata.labels.app = appName; spec = { volumes = { config.configMap.name = "overseerr"; }; containers = { overseerr = { image = appImage; volumeMounts = [ { name = "data"; mountPath = "/app/config"; } ]; ports.metrics.containerPort = 5055; resources = { requests = { cpu = "500m"; memory = "128Mi"; }; limits = { cpu = "1"; memory = "512Mi"; }; }; }; }; }; }; volumeClaimTemplates = [ { metadata.name = "data"; spec = { storageClassName = "nfs-client"; accessModes = ["ReadWriteOnce"]; resources.requests.storage = "1Gi"; }; } ]; }; kubernetes.resources.ingresses.overseerr = { metadata = { name = appName; annotations = { "cert-manager.io/issuer" = "le-issuer"; }; }; spec = { tls = [ { hosts = ["request-media.gmem.ca"]; secretName = "gmem-ca-wildcard"; } ]; rules = [ { host = "request-media.gmem.ca"; http.paths = [ { path = "/"; pathType = "Prefix"; backend.service = { name = appName; port.name = "http"; }; } ]; } ]; }; }; }