mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 16:10:05 +01:00
Package Kubenix script (#62)
* Package Kubenix script * Update changelog * Fix hardcoded kubeconfig * Expose generated manifest with Kubenix CLI derivation passthru
This commit is contained in:
parent
5692af23e0
commit
c00c78b982
3 changed files with 93 additions and 74 deletions
|
|
@ -2,8 +2,11 @@
|
|||
, vals
|
||||
, colordiff
|
||||
, evalModules
|
||||
, runCommand
|
||||
, writeShellScript
|
||||
, writeScriptBin
|
||||
, makeWrapper
|
||||
, symlinkJoin
|
||||
, lib
|
||||
, module ? { }
|
||||
, specialArgs ? { }
|
||||
}:
|
||||
|
|
@ -11,9 +14,7 @@ let
|
|||
kubernetes = (evalModules {
|
||||
inherit module specialArgs;
|
||||
}).config.kubernetes or { };
|
||||
in
|
||||
runCommand "kubenix"
|
||||
{
|
||||
|
||||
kubeconfig = kubernetes.kubeconfig or "";
|
||||
result = kubernetes.result or "";
|
||||
|
||||
|
|
@ -21,75 +22,25 @@ runCommand "kubenix"
|
|||
# as workaround, we write to a script and call that
|
||||
# https://github.com/kubernetes/kubernetes/pull/108199#issuecomment-1058405404
|
||||
diff = writeShellScript "kubenix-diff" ''
|
||||
${colordiff}/bin/colordiff --nobanner -N -u -I ' kubenix/hash: ' -I ' generation: ' $@
|
||||
${lib.getExe colordiff} --nobanner -N -u -I ' kubenix/hash: ' -I ' generation: ' $@
|
||||
'';
|
||||
} ''
|
||||
set -euo pipefail
|
||||
mkdir -p $out/bin
|
||||
|
||||
# write the manifests for use with `nix build`
|
||||
ln -s $result $out/manifest.json
|
||||
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;
|
||||
|
||||
# create a script for `nix run`
|
||||
cat <<EOF> $out/bin/kubenix
|
||||
set -uo pipefail
|
||||
|
||||
export KUBECONFIG=$kubeconfig
|
||||
export KUBECTL_EXTERNAL_DIFF=$diff
|
||||
|
||||
function _help() {
|
||||
echo "
|
||||
kubenix - Kubernetes management with Nix
|
||||
|
||||
commands:
|
||||
"" - run diff, prompt for confirmation, then apply
|
||||
apply - create resources in target cluster
|
||||
diff - show a diff between configured and live resources
|
||||
render - print resource manifests to stdout
|
||||
|
||||
options:
|
||||
-h --help - show this menu
|
||||
"
|
||||
}
|
||||
|
||||
function _kubectl() {
|
||||
${vals}/bin/vals eval -fail-on-missing-key-in-map < $result | ${kubectl}/bin/kubectl \$@
|
||||
}
|
||||
|
||||
# if no args given, add empty string
|
||||
[ \$# -eq 0 ] && set -- ""
|
||||
|
||||
# parse arguments
|
||||
while test \$# -gt 0; do
|
||||
case "\$1" in
|
||||
|
||||
-h|--help)
|
||||
_help
|
||||
exit 0;;
|
||||
|
||||
"")
|
||||
_kubectl diff -f - --prune
|
||||
if [[ "\$?" -eq 1 ]]; then
|
||||
read -p 'apply? [y/N]: ' response
|
||||
[[ \$response == "y" ]] && _kubectl apply -f - --prune --all
|
||||
fi
|
||||
shift;;
|
||||
|
||||
render)
|
||||
${vals}/bin/vals eval < $result
|
||||
shift;;
|
||||
|
||||
apply|diff)
|
||||
_kubectl \$@ -f - --prune
|
||||
shift;;
|
||||
|
||||
*)
|
||||
_kubectl \$@
|
||||
shift;;
|
||||
|
||||
esac
|
||||
done
|
||||
|
||||
EOF
|
||||
chmod +x $out/bin/kubenix
|
||||
''
|
||||
postBuild = ''
|
||||
export DIFF="${diff}"
|
||||
wrapProgram $out/bin/kubenix \
|
||||
--set PATH "$out/bin" \
|
||||
--set KUBECONFIG "${kubeconfig}" \
|
||||
--set KUBECTL_EXTERNAL_DIFF "''${DIFF}" \
|
||||
--set MANIFEST "${result}"
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue