# Redis on Kubernetes.
# For now, single instance (no redis-sentinel or redis-cluster)

local kube = import "kube.libsonnet";

{
    local redis = self,
    local cfg = redis.cfg,

    cfg:: {
        namespace: error "namespace must be set",
        appName: error "appName must be set",
        prefix: "", # if set, should be 'foo-'

        # valid version tag for https://hub.docker.com/_/redis/
        version: error "version must be set (to a valid docker hub tag, e.g. 5.0.4-alpine)",
        image: "redis:" + self.version,

        password: null,

        # Persist data to disk
        persistence: true,
        storageSize: "5Gi",
        storageClassName: error "storageClassName must be set",

        resources: {
            requests: { cpu: "50m", memory: "64Mi", },
            limits: { cpu: "500m", memory: "256Mi", },
        },
    },

    host:: redis.svc.host,

    makeName(suffix):: cfg.prefix + suffix,

    metadata:: {
        namespace: cfg.namespace,
        labels: {
            "app.kubernetes.io/name": cfg.appName,
            "app.kubernetes.io/managed-by": "kubecfg",
            "app.kubernetes.io/component": "redis",
        },
    },

    volumeClaim: kube.PersistentVolumeClaim(redis.makeName("redis")) {
        metadata+: redis.metadata,
        storage:: cfg.storageSize,
        storageClass:: cfg.storageClassName,
    },

    deployment: kube.Deployment(redis.makeName("redis")) {
        metadata+: redis.metadata,
        spec+: {
            replicas: 1,
            template+: {
                spec+: {
                    volumes_: {
                        data: redis.volumeClaim.volume,
                    },
                    containers_: {
                        redis: kube.Container(redis.makeName("redis")) {
                            image: cfg.image,
                            args: [
                                "redis-server",
                            ]
                            + (if cfg.persistence then ["--appendonly", "yes"] else [])
                            + (if cfg.password != null then ["--requirepass", "$(REDIS_PASSWORD)"] else []),
                            ports_: {
                                client: { containerPort: 6379 },
                            },
                            volumeMounts_: {
                                data: { mountPath: "/data" },
                            },
                            env_: {
                                [if cfg.password != null then "REDIS_PASSWORD"]: cfg.password,
                            },
                            resources: cfg.resources,
                        },
                    },
                    securityContext: {
                        runAsUser: 100,
                        runAsGroup: 101,
                        fsGroup: 101,
                    },
                },
            },
        },
    },

    svc: kube.Service(redis.makeName("redis")) {
        metadata+: redis.metadata,
        target:: redis.deployment,
    },
}
