From a74be81827b4cd70f738633de03f56c9349484f3 Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 15 Jun 2017 19:55:28 +0200 Subject: whatsupnix: add support for remote hosts --- krebs/5pkgs/simple/whatsupnix/default.nix | 4 +-- krebs/5pkgs/simple/whatsupnix/whatsupnix.bash | 43 ++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) (limited to 'krebs') diff --git a/krebs/5pkgs/simple/whatsupnix/default.nix b/krebs/5pkgs/simple/whatsupnix/default.nix index 1a108c5e..62ef597c 100644 --- a/krebs/5pkgs/simple/whatsupnix/default.nix +++ b/krebs/5pkgs/simple/whatsupnix/default.nix @@ -1,4 +1,4 @@ -{ bash, coreutils, gawk, nix, makeWrapper, stdenv }: +{ bash, coreutils, gawk, makeWrapper, nix, openssh, stdenv }: stdenv.mkDerivation { name = "whatsupnix"; @@ -8,7 +8,7 @@ stdenv.mkDerivation { mkdir -p $out/bin cat - ${./whatsupnix.bash} > $out/bin/whatsupnix <<\EOF #! ${bash}/bin/bash - export PATH=${stdenv.lib.makeBinPath [ coreutils gawk nix ]} + export PATH=${stdenv.lib.makeBinPath [ coreutils gawk nix openssh ]} EOF chmod +x $out/bin/whatsupnix ''; diff --git a/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash b/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash index a1941005..eba44be1 100644 --- a/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash +++ b/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash @@ -6,7 +6,7 @@ # Usage: # # set -o pipefail -# nix-build ... -Q ... | whatsupnix +# nix-build ... -Q ... | whatsupnix [user@target[:port]] # @@ -18,17 +18,46 @@ trap 'rm -f -- "$broken"' EXIT exec >&2 -$GAWK -v broken="$broken" -f <(cat - <<- 'AWK' - match($0, /builder for .*(\/nix\/store\/.+\.drv).* failed/, m) { +$GAWK -v broken="$broken" ' + match($0, /^builder for ‘(\/nix\/store\/[^’]+\.drv)’ failed/, m) { print m[1] >> broken } { print $0 } -AWK -) +' + +case $# in + 0) + print_log() { + $NIX_STORE -l "$1" + } + ;; + 1) + remote_user=${1%%@*} + if test "$remote_user" = "$1"; then + remote_user=root + else + set -- "${1#$remote_user@}" + fi + remote_port=${1##*:} + if test "$remote_port" = "$1"; then + remote_port=22 + else + set -- "${1%:$remote_port}" + fi + remote_host=$1 + print_log() { + ssh "$remote_user@$remote_host" -p "$remote_port" \ + nix-store -l "$1" + } + ;; + *) + echo "usage: whatsupnix [[USER@]HOST[:PORT]]" >&2 + exit 1 +esac export NIX_PAGER='' # for nix-store while read -r drv; do - title="** FAILED $drv LOG **" + title="** FAILED $drv LOG **" frame=${title//?/*} echo "$frame" @@ -36,7 +65,7 @@ while read -r drv; do echo "$frame" echo - $NIX_STORE -l "$drv" + print_log "$drv" echo done < "$broken" -- cgit v1.2.3