kubenix/pkgs/kubenix.nix

47 lines
1.2 KiB
Nix
Raw Normal View History

2023-07-07 22:01:34 -04:00
{ kubectl
, vals
, colordiff
, evalModules
, writeShellScript
, writeScriptBin
, makeWrapper
, symlinkJoin
, lib
2023-07-07 22:01:34 -04:00
, module ? { }
, specialArgs ? { }
}:
let
kubernetes = (evalModules {
inherit module specialArgs;
}).config.kubernetes or { };
2023-07-07 22:01:34 -04:00
kubeconfig = kubernetes.kubeconfig or "";
result = kubernetes.result or "";
# kubectl does some parsing which removes the -I flag so
# as workaround, we write to a script and call that
# https://github.com/kubernetes/kubernetes/pull/108199#issuecomment-1058405404
diff = writeShellScript "kubenix-diff" ''
${lib.getExe colordiff} --nobanner -N -u -I ' kubenix/hash: ' -I ' generation: ' $@
2023-07-07 22:01:34 -04:00
'';
script = (writeScriptBin "kubenix" (builtins.readFile ./kubenix.sh)).overrideAttrs (old: {
buildCommand = "${old.buildCommand}\npatchShebangs $out";
});
in
symlinkJoin {
name = "kubenix";
paths = [ script vals kubectl ];
buildInputs = [ makeWrapper ];
passthru.manifest = result;
postBuild = ''
export DIFF="${diff}"
wrapProgram $out/bin/kubenix \
--set PATH "$out/bin" \
--set KUBECONFIG "${kubeconfig}" \
--set KUBECTL_EXTERNAL_DIFF "''${DIFF}" \
--set MANIFEST "${result}"
'';
}