// HSWAW / hscloud / k0-specific extensions to kube.libsonnet

local kube = import "kube.libsonnet";

kube {
    // Basic Ingress config pointing `hosts` to the `target` service, with HTTPS set up
    SimpleIngress(name): kube.Ingress(name) {
        local ingress = self,
        hosts:: error "SimpleIngress.hosts must be defined",
        target:: error "SimpleIngress.target service must be defined",
        extraPaths:: [],
        metadata+: {
            annotations+: {
                'kubernetes.io/tls-acme': 'true',
                'cert-manager.io/cluster-issuer': 'letsencrypt-prod',
                'nginx.ingress.kubernetes.io/proxy-body-size': '0',
            },
        },
        spec+: {
            tls: [{ hosts: ingress.hosts, secretName: name + '-tls' }],
            rules: [
                {
                    host: host,
                    http: {
                        paths: [
                            { path: '/', backend: ingress.target.name_port },
                        ] + ingress.extraPaths,
                    },
                }
                for host in ingress.hosts
            ],
        },
    },
}
