2023-07-07 22:01:34 -04:00
|
|
|
{ kubectl
|
|
|
|
|
, vals
|
|
|
|
|
, colordiff
|
|
|
|
|
, evalModules
|
|
|
|
|
, writeShellScript
|
2024-05-07 01:33:26 +02:00
|
|
|
, writeScriptBin
|
|
|
|
|
, makeWrapper
|
|
|
|
|
, symlinkJoin
|
|
|
|
|
, lib
|
2023-07-07 22:01:34 -04:00
|
|
|
, module ? { }
|
|
|
|
|
, specialArgs ? { }
|
|
|
|
|
}:
|
|
|
|
|
let
|
|
|
|
|
kubernetes = (evalModules {
|
|
|
|
|
inherit module specialArgs;
|
|
|
|
|
}).config.kubernetes or { };
|
2024-05-07 01:33:26 +02:00
|
|
|
|
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" ''
|
2024-05-07 01:33:26 +02:00
|
|
|
${lib.getExe colordiff} --nobanner -N -u -I ' kubenix/hash: ' -I ' generation: ' $@
|
2023-07-07 22:01:34 -04:00
|
|
|
'';
|
|
|
|
|
|
2024-05-07 01:33:26 +02: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}"
|
|
|
|
|
'';
|
|
|
|
|
}
|