view output.py @ 67:adde35eb4773

collapse ./next to ./
author drewp@bigasterisk.com
date Fri, 03 May 2024 11:21:08 -0700
parents next/output.py@8134cd480817
children
line wrap: on
line source

import json
from pathlib import Path

build = Path('build/k8s_config')
build.mkdir(parents=True, exist_ok=True)


def toJson(d):
    return json.dumps(d, sort_keys=True, indent=2)


def createSvc(filename, name, ports):
    (build / f'{filename}_svc.yaml').write_text(toJson({
        "apiVersion": "v1",
        "kind": "Service",
        "metadata": {
            "name": name
        },
        "spec": {
            "ports": ports,
            "selector": {
                "app": name
            }
        },
    }))


def createIngress(filename, objName, policy, ingressPaths, host):

    (build / filename).write_text(
        toJson({
            "apiVersion": "networking.k8s.io/v1",
            "kind": "Ingress",
            "metadata": {
                "name": objName,
                "annotations": {
                    "cert-manager.io/cluster-issuer": "letsencrypt-prod",
                    "ingress.pomerium.io/allow_public_unauthenticated_access": "false",
                    "ingress.pomerium.io/pass_identity_headers": "true",
                    "ingress.pomerium.io/preserve_host_header": "true",
                    "ingress.pomerium.io/policy": policy,
                }
            },
            "spec": {
                "ingressClassName": "pomerium",
                "rules": [{
                    "host": host,
                    "http": {
                        "paths": ingressPaths
                    }
                },],
                "tls": [{
                    "hosts": [host],
                    "secretName": f"{host}-tls"
                }]
            }
        }))


def createPv(storageFileName, volName, request):
    (build / f'{storageFileName}_0pv.yaml').write_text(
        toJson({
            "apiVersion": "v1",
            "kind": "PersistentVolume",
            "metadata": {
                "name": volName,
                "labels": {
                    "type": "local"
                }
            },
            "spec": {
                "storageClassName": "manual",
                "hostPath": {
                    "path": f"/opt/{volName}"
                },
                "capacity": {
                    "storage": request
                },
                "accessModes": ["ReadWriteMany"],
                "persistentVolumeReclaimPolicy": "Retain",
                "claimRef": {
                    "namespace": "default",
                    "name": volName
                }
            }
        }))


def createPvc(storageFileName, volName, request):
    (build / f'{storageFileName}_1pvc.yaml').write_text(toJson({
        "apiVersion": "v1",
        "kind": "PersistentVolumeClaim",
        "metadata": {
            "name": volName,
        },
        "spec": {
            "storageClassName": "",
            "volumeName": volName,
            "accessModes": ["ReadWriteMany"],
            "resources": {
                "requests": {
                    "storage": request
                }
            }
        },
    }))


def affinityToNode(node):
    return {
        "nodeAffinity": {
            "requiredDuringSchedulingIgnoredDuringExecution": {
                "nodeSelectorTerms": [{
                    "matchExpressions": [{
                        "key": "kubernetes.io/hostname",
                        "operator": "In",
                        "values": [node],
                    }],
                }],
            },
        }
    }