Format repo
This commit is contained in:
parent
3169149045
commit
8160b9da0b
37 changed files with 643 additions and 392 deletions
155
kubenix.nix
155
kubenix.nix
|
@ -1,15 +1,23 @@
|
|||
inputs@{ self, servers, flutils, nixpkgs, kubenix, ... }: flutils.lib.eachDefaultSystem
|
||||
(system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
lib = pkgs.lib;
|
||||
deployScript = (pkgs.writeScriptBin "applyset-deploy.sh" (builtins.readFile ./applyset-deploy.sh)).overrideAttrs (old: {
|
||||
buildCommand = "${old.buildCommand}\npatchShebangs $out";
|
||||
});
|
||||
inputs @ {
|
||||
self,
|
||||
servers,
|
||||
flake-utils,
|
||||
nixpkgs,
|
||||
kubenix,
|
||||
...
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem
|
||||
(system: let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
lib = pkgs.lib;
|
||||
deployScript = (pkgs.writeScriptBin "applyset-deploy.sh" (builtins.readFile ./applyset-deploy.sh)).overrideAttrs (old: {
|
||||
buildCommand = "${old.buildCommand}\npatchShebangs $out";
|
||||
});
|
||||
|
||||
machines = servers.machines.${system};
|
||||
machines = servers.machines.${system};
|
||||
|
||||
mkKubernetes = name: module: namespace: (kubenix.evalModules.${system} {
|
||||
mkKubernetes = name: module: namespace:
|
||||
(kubenix.evalModules.${system} {
|
||||
specialArgs = {
|
||||
inherit namespace system machines self;
|
||||
inherit (inputs) nixhelm blog-pim dns nixpkgs nixng;
|
||||
|
@ -22,67 +30,74 @@ inputs@{ self, servers, flutils, nixpkgs, kubenix, ... }: flutils.lib.eachDefaul
|
|||
};
|
||||
};
|
||||
|
||||
module = { kubenix, ... }:
|
||||
{
|
||||
imports = [
|
||||
kubenix.modules.k8s
|
||||
kubenix.modules.helm
|
||||
./modules
|
||||
module
|
||||
];
|
||||
module = {kubenix, ...}: {
|
||||
imports = [
|
||||
kubenix.modules.k8s
|
||||
kubenix.modules.helm
|
||||
./modules
|
||||
module
|
||||
];
|
||||
|
||||
config = {
|
||||
kubenix.project = name;
|
||||
kubernetes.namespace = namespace;
|
||||
};
|
||||
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 =
|
||||
let
|
||||
# HACK: create normal way of checking if server runs k8s
|
||||
k8sMachines = lib.filterAttrs (n: m: m.kubernetesNodeLabels != null) machines;
|
||||
k8sServerNames = builtins.concatStringsSep " " (builtins.attrNames k8sMachines);
|
||||
in
|
||||
/* bash */ ''
|
||||
wrapProgram $out/bin/applyset-deploy.sh \
|
||||
--suffix PATH : "$out/bin" \
|
||||
--run 'export KUBECONFIG=''${KUBECONFIG:-${toString kubeconfig}}' \
|
||||
--set MANIFEST '${result}' \
|
||||
--set NAME '${name}' \
|
||||
--set NAMESPACE '${namespace}' \
|
||||
--set SERVERS '${k8sServerNames}' \
|
||||
--set DYFF '${lib.getExe pkgs.dyff}' \
|
||||
--set GCROOTDIR '/nix/var/nix/gcroots/kubernetes-manifests'
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "${name}-deploy";
|
||||
value = wrappedDeployScript;
|
||||
};
|
||||
})
|
||||
.config
|
||||
.kubernetes;
|
||||
|
||||
deployments = import ./deployments.nix;
|
||||
in
|
||||
{
|
||||
packages = pkgs.lib.mergeAttrs (pkgs.lib.mapAttrs' mkDeployApp deployments) (pkgs.lib.mapAttrs' mkManifest deployments);
|
||||
})
|
||||
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 = let
|
||||
# HACK: create normal way of checking if server runs k8s
|
||||
k8sMachines = lib.filterAttrs (n: m: m.kubernetesNodeLabels != null) machines;
|
||||
k8sServerNames = builtins.concatStringsSep " " (builtins.attrNames k8sMachines);
|
||||
in
|
||||
/*
|
||||
bash
|
||||
*/
|
||||
''
|
||||
wrapProgram $out/bin/applyset-deploy.sh \
|
||||
--suffix PATH : "$out/bin" \
|
||||
--run 'export KUBECONFIG=''${KUBECONFIG:-${toString kubeconfig}}' \
|
||||
--set MANIFEST '${result}' \
|
||||
--set NAME '${name}' \
|
||||
--set NAMESPACE '${namespace}' \
|
||||
--set SERVERS '${k8sServerNames}' \
|
||||
--set DYFF '${lib.getExe pkgs.dyff}' \
|
||||
--set GCROOTDIR '/nix/var/nix/gcroots/kubernetes-manifests'
|
||||
'';
|
||||
};
|
||||
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);
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue