mirror of
https://github.com/kmein/niveum
synced 2026-03-16 10:11:08 +01:00
feat: provide a unified parallel interface to niveum- scripts
This commit is contained in:
63
shell.nix
63
shell.nix
@@ -36,19 +36,29 @@ let
|
|||||||
path = toString .versions/retiolum.json;
|
path = toString .versions/retiolum.json;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
updateCommand = name: dependency: ''
|
|
||||||
${pkgs.nix-prefetch-git}/bin/nix-prefetch-git --url "${dependency.url}" --rev "${dependency.ref}" > "${dependency.path}"'';
|
|
||||||
|
|
||||||
updateScripts =
|
|
||||||
lib.mapAttrsToList
|
|
||||||
(name: dependency: pkgs.writers.writeDashBin "niveum-update-${name}" (updateCommand name dependency))
|
|
||||||
dependencies;
|
|
||||||
|
|
||||||
in pkgs.mkShell {
|
in pkgs.mkShell {
|
||||||
buildInputs = updateScripts ++ [
|
buildInputs = [
|
||||||
(pkgs.writers.writeDashBin "niveum-update"
|
(let
|
||||||
(lib.concatStringsSep " &\n" (lib.mapAttrsToList updateCommand dependencies)))
|
updateCommand = pkgs.writers.writeDash "niveum-update-one" ''
|
||||||
|
[ $# -eq 1 ] || {
|
||||||
|
echo "Please provide a dependency to update." >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
case "$1" in
|
||||||
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: dependency: ''
|
||||||
|
${name})
|
||||||
|
${pkgs.nix-prefetch-git}/bin/nix-prefetch-git --url "${dependency.url}" --rev "${dependency.ref}" > "${dependency.path}";;
|
||||||
|
'') dependencies)}
|
||||||
|
esac
|
||||||
|
'';
|
||||||
|
in pkgs.writers.writeDashBin "niveum-update" ''
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
dependencies="$@"
|
||||||
|
else
|
||||||
|
dependencies="${lib.concatStringsSep " " (lib.attrNames dependencies)}"
|
||||||
|
fi
|
||||||
|
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${updateCommand} '{1}' ::: $dependencies
|
||||||
|
'')
|
||||||
|
|
||||||
(let
|
(let
|
||||||
deployCommand = pkgs.writers.writeDash "niveum-deploy-one" ''
|
deployCommand = pkgs.writers.writeDash "niveum-deploy-one" ''
|
||||||
@@ -63,22 +73,29 @@ in pkgs.mkShell {
|
|||||||
fi
|
fi
|
||||||
'')
|
'')
|
||||||
|
|
||||||
(pkgs.writers.writeDashBin "niveum-status" ''
|
(let
|
||||||
cd "${toString ./.}"
|
statusCommand = pkgs.writers.writeDash "niveum-status-one" ''
|
||||||
|
[ $# -eq 1 ] || {
|
||||||
|
echo "Please provide a niveum system hostname." >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
hostname="$1"
|
||||||
version_file=/etc/niveum/version
|
version_file=/etc/niveum/version
|
||||||
|
|
||||||
for system in systems/*; do
|
if commit_id="$(${pkgs.coreutils}/bin/timeout 2s ${pkgs.openssh}/bin/ssh "$hostname" cat $version_file 2>/dev/null)"; then
|
||||||
hostname="$(${pkgs.coreutils}/bin/basename "$system")"
|
${pkgs.git}/bin/git log -1 --oneline "$commit_id"
|
||||||
|
|
||||||
if commit_id="$(${pkgs.openssh}/bin/ssh "$hostname" cat $version_file 2>/dev/null)"; then
|
|
||||||
machine_status="$(${pkgs.git}/bin/git log -1 --oneline "$commit_id")"
|
|
||||||
else
|
else
|
||||||
machine_status=offline
|
echo offline
|
||||||
fi
|
fi
|
||||||
|
'';
|
||||||
printf "\033[1m%11s\033[0m %s\n" "$hostname" "$machine_status"
|
in pkgs.writers.writeDashBin "niveum-status" ''
|
||||||
done
|
if [ $# -gt 0 ]; then
|
||||||
|
systems="$@"
|
||||||
|
else
|
||||||
|
systems="$(ls ${toString ./.}/systems)"
|
||||||
|
fi
|
||||||
|
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${statusCommand} '{1}' ::: $systems
|
||||||
'')
|
'')
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user