local kube = import "kube.libsonnet";

// HSPKI support
// (This is meant to be a simpler abstraction than mirko.libsonnet)
// To connect certificate to a HSPKI/Mirko service, use PodSpec and Container() or GoContainer()
{
    local top = self,
    local cfg = top.cfg,

    metadata:: {
        namespace: error "namespace must be set",
    },

    cfg:: {
        // name is used to generate certificate and secret names
        // and should match name of the Service
        name: error "name must be set",
        namespace: top.metadata.namespace,

        certName: cfg.name + '-cert',
        secretName: cfg.name + '-cert',

        realm: "hswaw.net",
        clusterFQDN: "k0.hswaw.net",
    },

    local ns = kube.Namespace(cfg.namespace),

    cert: ns.Contain(kube.Certificate(cfg.certName)) {
        spec: {
            secretName: cfg.secretName,
            duration: "35040h0m0s", // 4 years
            issuerRef: {
                // Contract with cluster/lib/pki.libsonnet.
                name: "pki-ca",
                kind: "ClusterIssuer",
            },
            local name = cfg.name,
            local namespace = cfg.namespace,
            commonName: "%s.%s.svc.%s" % [name, namespace, cfg.clusterFQDN],
            dnsNames: [
                "%s" % [name],
                "%s.%s" % [name, namespace],
                "%s.%s.svc" % [name, namespace],
                "%s.%s.svc.cluster.local" % [name, namespace],
                "%s.%s.svc.%s" % [name, namespace, cfg.clusterFQDN],
            ],
        },
    },

    PodSpec:: kube.PodSpec {
        volumes_+: {
            hspki: { secret: { secretName: cfg.secretName } },
        },
    },

    Container(name):: kube.Container(name) {
        volumeMounts_+: {
            hspki: { mountPath: "/mnt/pki" },
        },
    },

    GoContainer(name):: top.Container(name) {
        executable_:: error "executable_ must be set",
        command: [
            self.executable_,
            "-hspki_realm", cfg.realm,
            "-hspki_cluster", cfg.clusterFQDN,
            "-hspki_tls_ca_path", "/mnt/pki/ca.crt",
            "-hspki_tls_certificate_path", "/mnt/pki/tls.crt",
            "-hspki_tls_key_path", "/mnt/pki/tls.key",
            // TODO: Remove this after go/hspki services are updated not to require it
            "-logtostderr",
        ],
    }
}
