# Deploy MetalLB

local kube = import "../../../kube/kube.libsonnet";

local bindServiceAccountClusterRole(sa, cr) = kube.ClusterRoleBinding(cr.metadata.name) {
    roleRef: {
        apiGroup: "rbac.authorization.k8s.io",
        kind: "ClusterRole",
        name: cr.metadata.name,
    },
    subjects: [
        {
            kind: "ServiceAccount",
            name: sa.metadata.name,
            namespace: sa.metadata.namespace,
        },
    ],
};

{
    Environment: {
        local env = self,
        local cfg = env.cfg,
        cfg:: {
            namespace: "metallb-system",
            namespaceCreate: true,
            version:: "v0.7.3",
            imageController: "metallb/controller:" + cfg.version,
            imageSpeaker: "metallb/speaker:" + cfg.version,
            addressPools: error "addressPools must be set in config",
        },

        ns: if cfg.namespaceCreate then kube.Namespace(cfg.namespace),

        saController: kube.ServiceAccount("controller") {
            metadata+: {
                namespace: cfg.namespace,
            },
        },

        saSpeaker: kube.ServiceAccount("speaker") {
            metadata+: {
                namespace: cfg.namespace,
            },
        },

        crController: kube.ClusterRole("%s:controller" % cfg.namespace) {
            rules: [
                {
                    apiGroups: [""],
                    resources: ["services"],
                    verbs: ["get", "list", "watch", "update"],
                },
                {
                    apiGroups: [""],
                    resources: ["services/status"],
                    verbs: ["update"],
                },
                {
                    apiGroups: [""],
                    resources: ["events"],
                    verbs: ["create", "patch"],
                },
            ],
        },

        crbController: bindServiceAccountClusterRole(env.saController, env.crController),

        crSpeaker: kube.ClusterRole("%s:speaker" % cfg.namespace) {
            rules: [
                {
                    apiGroups: [""],
                    resources: ["services", "endpoints", "nodes"],
                    verbs: ["get", "list", "watch"],
                },
            ],
        },

        crbSpeaker: bindServiceAccountClusterRole(env.saSpeaker, env.crSpeaker),

        roleWatcher: kube.Role("config-watcher") {
            metadata+: {
                namespace: cfg.namespace,
            },
            rules: [
                {
                    apiGroups: [""],
                    resources: ["configmaps"],
                    verbs: ["get", "list", "watch"],
                },
                {
                    apiGroups: [""],
                    resources: ["events"],
                    verbs: ["create"],
                },
            ],
        },

        rbWatcher: kube.RoleBinding("config-watcher") {
            metadata+: {
                namespace: cfg.namespace,
            },
            subjects: [
                { kind: "ServiceAccount", name: env.saController.metadata.name },
                { kind: "ServiceAccount", name: env.saSpeaker.metadata.name },
            ],
            roleRef: {
                apiGroup: "rbac.authorization.k8s.io",
                kind: "Role",
                name: env.roleWatcher.metadata.name,
            },
        },

        deployController: kube.Deployment("controller") {
            metadata+: {
                namespace: cfg.namespace,
            },
            spec+: {
                revisionHistoryLimit: 3,
                template+: {
                    spec+: {
                        serviceAccountName: env.saController.metadata.name,
                        terminationGracePeriodSeconds: 0,
                        securityContext: {
                            runAsNonRoot: true,
                            runAsUser: 65534, # nobody
                        },
                        containers_: {
                            controller: kube.Container("controller") {
                                image: cfg.imageController,
                                args: [ "--port=7472", "--config=config" ],
                                ports: [
                                    { name: "monitoring", containerPort: 7472 },
                                ],
                                resources: {
                                    limits: { cpu: "200m", memory: "300Mi" },
                                },
                                securityContext: {
                                    allowPrivilegeEscalation: false,
                                    capabilities: { drop: [ "all" ] },
                                    readOnlyRootFilesystem: true,
                                },
                            },
                        },
                    },
                },
            },
        },

        daemonsetSpeaker: kube.DaemonSet("speaker") {
            metadata+: {
                namespace: cfg.namespace,
            },
            spec+: {
                template+: {
                    spec+: {
                        serviceAccountName: env.saSpeaker.metadata.name,
                        hostNetwork: true,
                        containers_: {
                            speaker: kube.Container("speaker") {
                                image: cfg.imageSpeaker,
                                args: [ "--port=7472", "--config=config" ],
                                env_: {
                                    METALLB_NODE_NAME: kube.FieldRef("spec.nodeName"),
                                },
                                ports: [
                                    { name: "monitoring", containerPort: 7472 },
                                ],
                                resources: {
                                    limits: { cpu: "200m", memory: "300Mi" },
                                },
                                securityContext: {
                                    allowPrivilegeEscalation: false,
                                    capabilities: { drop: [ "all" ], add: [ "net_raw" ] },
                                    readOnlyRootFilesystem: true,
                                },
                            },
                        },
                    },
                },
            },
        },

        configMap: kube.ConfigMap("config") {
            local cm = self,
            metadata+: {
                namespace: cfg.namespace,
            },
            data: {
                config: std.manifestYamlDoc({
                    "address-pools": cfg.addressPools,
                }),
            },
        },
    },
}
