refactor(kubenix): DRY deployment creation
feat(kubenix): Create applysets for remaining resources
This commit is contained in:
parent
5a4376f699
commit
7a915f0928
10 changed files with 324 additions and 301 deletions
|
@ -1,17 +1,11 @@
|
|||
{ self, pkgs, machines, dns, myLib, flake-utils, kubenix, nixhelm, blog-pim, ... }: flake-utils.lib.eachDefaultSystem
|
||||
(system:
|
||||
let
|
||||
mkKubenixPackage = module: kubenix.packages.${system}.default.override
|
||||
{
|
||||
specialArgs = { inherit myLib kubenix nixhelm system dns blog-pim machines; };
|
||||
module = { imports = [ module ]; };
|
||||
};
|
||||
|
||||
deployScript = (pkgs.writeScriptBin "kubenix" (builtins.readFile ./kubenix-deploy.sh)).overrideAttrs (old: {
|
||||
buildCommand = "${old.buildCommand}\npatchShebangs $out";
|
||||
});
|
||||
|
||||
mkDeployScript = kubernetes: applyset: namespace:
|
||||
mkDeployScript = kubernetes: applysetName: namespace:
|
||||
let
|
||||
kubeconfig = kubernetes.kubeconfig or "";
|
||||
result = kubernetes.result or "";
|
||||
|
@ -28,17 +22,17 @@
|
|||
--suffix PATH : "$out/bin" \
|
||||
--run 'export KUBECONFIG=''${KUBECONFIG:-${toString kubeconfig}}' \
|
||||
--set MANIFEST '${result}' \
|
||||
--set APPLYSET 'applyset-${applyset}' \
|
||||
--set APPLYSET 'applyset-${applysetName}' \
|
||||
--set NAMESPACE '${namespace}'
|
||||
'';
|
||||
};
|
||||
in
|
||||
wrappedDeployScript;
|
||||
|
||||
mkDeployScriptAndManifest = module: applyset: namespace:
|
||||
mkDeployScriptAndManifest = name: { module, namespace }:
|
||||
let
|
||||
kubernetes = (kubenix.evalModules.${system} {
|
||||
specialArgs = { inherit namespace myLib blog-pim dns; };
|
||||
specialArgs = { inherit namespace myLib blog-pim dns nixhelm system machines; };
|
||||
|
||||
module = { kubenix, ... }:
|
||||
{
|
||||
|
@ -51,7 +45,7 @@
|
|||
];
|
||||
|
||||
config = {
|
||||
kubenix.project = applyset;
|
||||
kubenix.project = name;
|
||||
kubernetes.namespace = namespace;
|
||||
};
|
||||
};
|
||||
|
@ -59,53 +53,126 @@
|
|||
in
|
||||
{
|
||||
manifest = kubernetes.result;
|
||||
deploy = mkDeployScript kubernetes applyset namespace;
|
||||
deploy = mkDeployScript kubernetes name namespace;
|
||||
};
|
||||
|
||||
deployers = {
|
||||
bootstrap-default = {
|
||||
module = "${self}/kubenix-modules/bootstrapDefault.nix";
|
||||
namespace = "default";
|
||||
};
|
||||
|
||||
bootstrap-kube-system = {
|
||||
module = "${self}/kubenix-modules/bootstrapKubeSystem.nix";
|
||||
namespace = "kube-system";
|
||||
};
|
||||
|
||||
cyberchef = {
|
||||
module = "${self}/kubenix-modules/cyberchef.nix";
|
||||
namespace = "static-websites";
|
||||
};
|
||||
|
||||
freshrss = {
|
||||
module = "${self}/kubenix-modules/freshrss.nix";
|
||||
namespace = "freshrss";
|
||||
};
|
||||
|
||||
radicale = {
|
||||
module = "${self}/kubenix-modules/radicale.nix";
|
||||
namespace = "radicale";
|
||||
};
|
||||
|
||||
kms = {
|
||||
module = "${self}/kubenix-modules/kms.nix";
|
||||
namespace = "kms";
|
||||
};
|
||||
|
||||
atuin = {
|
||||
module = "${self}/kubenix-modules/atuin.nix";
|
||||
namespace = "atuin";
|
||||
};
|
||||
|
||||
blog = {
|
||||
module = "${self}/kubenix-modules/blog.nix";
|
||||
namespace = "static-websites";
|
||||
};
|
||||
|
||||
nextcloud = {
|
||||
module = "${self}/kubenix-modules/nextcloud.nix";
|
||||
namespace = "nextcloud";
|
||||
};
|
||||
|
||||
hedgedoc = {
|
||||
module = "${self}/kubenix-modules/hedgedoc.nix";
|
||||
namespace = "hedgedoc";
|
||||
};
|
||||
|
||||
kitchenowl = {
|
||||
module = "${self}/kubenix-modules/kitchenowl.nix";
|
||||
namespace = "kitchenowl";
|
||||
};
|
||||
|
||||
forgejo = {
|
||||
module = "${self}/kubenix-modules/forgejo";
|
||||
namespace = "forgejo";
|
||||
};
|
||||
|
||||
paperless = {
|
||||
module = "${self}/kubenix-modules/paperless.nix";
|
||||
namespace = "paperless";
|
||||
};
|
||||
|
||||
syncthing = {
|
||||
module = "${self}/kubenix-modules/syncthing.nix";
|
||||
namespace = "syncthing";
|
||||
};
|
||||
|
||||
pihole = {
|
||||
module = "${self}/kubenix-modules/pihole.nix";
|
||||
namespace = "dns";
|
||||
};
|
||||
|
||||
immich = {
|
||||
module = "${self}/kubenix-modules/immich.nix";
|
||||
namespace = "immich";
|
||||
};
|
||||
|
||||
attic = {
|
||||
module = "${self}/kubenix-modules/attic.nix";
|
||||
namespace = "attic";
|
||||
};
|
||||
|
||||
inbucket = {
|
||||
module = "${self}/kubenix-modules/inbucket.nix";
|
||||
namespace = "inbucket";
|
||||
};
|
||||
|
||||
dnsmasq = {
|
||||
module = "${self}/kubenix-modules/dnsmasq.nix";
|
||||
namespace = "dns";
|
||||
};
|
||||
|
||||
bind9 = {
|
||||
module = "${self}/kubenix-modules/bind9";
|
||||
namespace = "dns";
|
||||
};
|
||||
|
||||
media = {
|
||||
module = "${self}/kubenix-modules/media.nix";
|
||||
namespace = "media";
|
||||
};
|
||||
|
||||
traefik = {
|
||||
module = "${self}/kubenix-modules/traefik.nix";
|
||||
namespace = "kube-system";
|
||||
};
|
||||
|
||||
minecraft = {
|
||||
module = "${self}/kubenix-modules/minecraft.nix";
|
||||
namespace = "minecraft";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
kubenix.all.deploy = mkKubenixPackage "${self}/kubenix-modules/all.nix";
|
||||
kubenix.bootstrap.deploy = mkKubenixPackage "${self}/kubenix-modules/base.nix";
|
||||
|
||||
kubenix.cyberchef = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/cyberchef.nix" "cyberchef" "static-websites";
|
||||
kubenix.freshrss = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/freshrss.nix" "freshrss" "freshrss";
|
||||
kubenix.radicale = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/radicale.nix" "radicale" "radicale";
|
||||
kubenix.kms = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/kms.nix" "kms" "kms";
|
||||
kubenix.atuin = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/atuin.nix" "atuin" "atuin";
|
||||
kubenix.blog = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/blog.nix" "blog" "static-websites";
|
||||
kubenix.nextcloud = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/nextcloud.nix" "nextcloud" "nextcloud";
|
||||
kubenix.hedgedoc = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/hedgedoc.nix" "hedgedoc" "hedgedoc";
|
||||
kubenix.kitchenowl = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/kitchenowl.nix" "kitchenowl" "kitchenowl";
|
||||
kubenix.forgejo = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/forgejo" "forgejo" "forgejo";
|
||||
kubenix.paperless = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/paperless.nix" "paperless" "paperless";
|
||||
kubenix.syncthing = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/syncthing.nix" "syncthing" "syncthing";
|
||||
kubenix.pihole = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/pihole.nix" "pihole" "dns";
|
||||
kubenix.immich = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/immich.nix" "immich" "immich";
|
||||
kubenix.attic = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/attic.nix" "attic" "attic";
|
||||
kubenix.inbucket = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/inbucket.nix" "inbucket" "inbucket";
|
||||
kubenix.dnsmasq = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/dnsmasq.nix" "dnsmasq" "dns";
|
||||
kubenix.bind9 = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/bind9" "bind9" "dns";
|
||||
kubenix.media = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/media.nix" "media" "media";
|
||||
kubenix.traefik = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/traefik.nix" "traefik" "kube-system";
|
||||
kubenix.minecraft = mkDeployScriptAndManifest
|
||||
"${self}/kubenix-modules/minecraft.nix" "minecraft" "minecraft";
|
||||
kubenix = builtins.mapAttrs mkDeployScriptAndManifest deployers;
|
||||
})
|
||||
|
|
Reference in a new issue