diff --git a/kubenix-modules/all.nix b/kubenix-modules/all.nix index 212e014..9e48ea8 100644 --- a/kubenix-modules/all.nix +++ b/kubenix-modules/all.nix @@ -31,6 +31,7 @@ in ./cert-manager.nix ./custom/ingress.nix ./custom/nfs-volume.nix + ./custom/longhorn-volume.nix ./traefik.nix ] ++ applications; } diff --git a/kubenix-modules/custom/longhorn-volume.nix b/kubenix-modules/custom/longhorn-volume.nix new file mode 100644 index 0000000..22fce25 --- /dev/null +++ b/kubenix-modules/custom/longhorn-volume.nix @@ -0,0 +1,68 @@ +{ lib, config, ... }: +let + longhornVolumeOpts = { name, ... }: { + options = { + storage = lib.mkOption { + type = lib.types.str; + }; + }; + }; +in +{ + options = { + lab.longhornVolumes = lib.mkOption { + type = with lib.types; attrsOf (submodule longhornVolumeOpts); + default = { }; + }; + }; + + config = { + kubernetes.resources = { + persistentVolumes = builtins.mapAttrs + (name: longhornVolume: { + spec = { + accessModes = [ "ReadWriteOnce" ]; + capacity.storage = longhornVolume.storage; + + claimRef = { + inherit name; + namespace = "default"; + }; + + csi = { + driver = "driver.longhorn.io"; + fsType = "ext4"; + + volumeAttributes = { + dataLocality = "disabled"; + fromBackup = ""; + fsType = "ext4"; + numberOfReplicas = "2"; + recurringJobSelector = lib.generators.toYAML { } [{ + name = "backup-nfs"; + isGroup = false; + }]; + staleReplicaTimeout = "30"; + unmapMarkSnapChainRemoved = "ignored"; + }; + volumeHandle = name; + }; + + persistentVolumeReclaimPolicy = "Delete"; + volumeMode = "Filesystem"; + }; + }) + config.lab.longhornVolumes; + + persistentVolumeClaims = builtins.mapAttrs + (name: longhornVolume: { + spec = { + accessModes = [ "ReadWriteOnce" ]; + resources.requests.storage = longhornVolume.storage; + storageClassName = ""; + }; + }) + config.lab.longhornVolumes; + }; + }; +} diff --git a/kubenix-modules/hedgedoc.nix b/kubenix-modules/hedgedoc.nix index 459a36e..0379011 100644 --- a/kubenix-modules/hedgedoc.nix +++ b/kubenix-modules/hedgedoc.nix @@ -83,47 +83,11 @@ targetPort = "web"; }; }; - - persistentVolumeClaims.hedgedoc-uploads.spec = { - accessModes = [ "ReadWriteOnce" ]; - resources.requests.storage = "50Mi"; - storageClassName = ""; - }; - - persistentVolumes.hedgedoc-uploads.spec = { - accessModes = [ "ReadWriteOnce" ]; - capacity.storage = "50Mi"; - - claimRef = { - name = "hedgedoc-uploads"; - namespace = "default"; - }; - - csi = { - driver = "driver.longhorn.io"; - fsType = "ext4"; - - volumeAttributes = { - dataLocality = "disabled"; - fromBackup = ""; - fsType = "ext4"; - numberOfReplicas = "2"; - recurringJobSelector = lib.generators.toYAML { } [{ - name = "backup-nfs"; - isGroup = false; - }]; - staleReplicaTimeout = "30"; - unmapMarkSnapChainRemoved = "ignored"; - }; - volumeHandle = "hedgedoc-uploads"; - }; - - persistentVolumeReclaimPolicy = "Delete"; - volumeMode = "Filesystem"; - }; }; lab = { + longhornVolumes.hedgedoc-uploads.storage = "50Mi"; + ingresses.hedgedoc = { host = "md.kun.is";