111 lines
3.4 KiB
Nix
111 lines
3.4 KiB
Nix
{
|
|
description = "Kubernetes deployments";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
flutils.url = "github:numtide/flake-utils";
|
|
|
|
nixhelm = {
|
|
url = "github:farcaller/nixhelm";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
blog-pim = {
|
|
# HACK: pinning this to a specific revision, as my automation is broken.
|
|
url = "git+https://git.kun.is/home/blog-pim?rev=7296f7f5bf5f089a5137036dcbd8058cf3e4a9e5";
|
|
inputs = {
|
|
nixpkgs.follows = "nixpkgs";
|
|
flutils.follows = "flutils";
|
|
};
|
|
};
|
|
|
|
kubenix = {
|
|
url = "github:pizzapim/kubenix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
dns = {
|
|
url = "github:kirelagin/dns.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
servers = {
|
|
# url = "git+https://git.kun.is/home/nixos-servers";
|
|
type = "path";
|
|
path = "/home/pim/git/nixos-servers";
|
|
};
|
|
};
|
|
|
|
outputs = inputs@{ self, servers, flutils, nixpkgs, kubenix, ... }: flutils.lib.eachDefaultSystem
|
|
(system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
deployScript = (pkgs.writeScriptBin "applyset-deploy.sh" (builtins.readFile ./applyset-deploy.sh)).overrideAttrs (old: {
|
|
buildCommand = "${old.buildCommand}\npatchShebangs $out";
|
|
});
|
|
|
|
machines = servers.machines.${system};
|
|
|
|
mkKubernetes = name: module: namespace: (kubenix.evalModules.${system} {
|
|
specialArgs = {
|
|
inherit namespace system machines;
|
|
inherit (servers) globals;
|
|
inherit (inputs) nixhelm blog-pim dns;
|
|
};
|
|
|
|
module = { kubenix, ... }:
|
|
{
|
|
imports = [
|
|
kubenix.modules.k8s
|
|
kubenix.modules.helm
|
|
./modules
|
|
module
|
|
];
|
|
|
|
config = {
|
|
kubenix.project = name;
|
|
kubernetes.namespace = namespace;
|
|
};
|
|
};
|
|
}).config.kubernetes;
|
|
|
|
mkManifest = name: { module, namespace }: {
|
|
name = "${name}-manifest";
|
|
value = (mkKubernetes name module namespace).result;
|
|
};
|
|
|
|
mkDeployApp = name: { module, namespace }:
|
|
let
|
|
kubernetes = mkKubernetes name module namespace;
|
|
kubeconfig = kubernetes.kubeconfig or "";
|
|
result = kubernetes.result or "";
|
|
|
|
wrappedDeployScript = pkgs.symlinkJoin
|
|
{
|
|
name = "applyset-deploy.sh";
|
|
paths = [ deployScript pkgs.vals pkgs.kubectl ];
|
|
buildInputs = [ pkgs.makeWrapper ];
|
|
passthru.manifest = result;
|
|
meta.mainProgram = "applyset-deploy.sh";
|
|
|
|
postBuild = ''
|
|
wrapProgram $out/bin/applyset-deploy.sh \
|
|
--suffix PATH : "$out/bin" \
|
|
--run 'export KUBECONFIG=''${KUBECONFIG:-${toString kubeconfig}}' \
|
|
--set MANIFEST '${result}' \
|
|
--set APPLYSET 'applyset-${name}' \
|
|
--set NAMESPACE '${namespace}'
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
name = "${name}-deploy";
|
|
value = wrappedDeployScript;
|
|
};
|
|
|
|
deployments = import ./deployments.nix;
|
|
in
|
|
{
|
|
packages = pkgs.lib.mergeAttrs (pkgs.lib.mapAttrs' mkDeployApp deployments) (pkgs.lib.mapAttrs' mkManifest deployments);
|
|
});
|
|
}
|