From cbed66c934336ec73f3015e6a013f625e6f42e1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20=E2=80=9CNiols=E2=80=9D=20Jeannerod?=
 <nicolas.jeannerod@moduscreate.com>
Date: Wed, 26 Feb 2025 13:07:34 +0100
Subject: [PATCH] Report errors in subprocesses

---
 infra/proxmox-provision.sh | 16 +++++++++++++++-
 infra/proxmox-remove.sh    | 17 ++++++++++++++++-
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/infra/proxmox-provision.sh b/infra/proxmox-provision.sh
index edb87254..3b5b7730 100755
--- a/infra/proxmox-provision.sh
+++ b/infra/proxmox-provision.sh
@@ -366,7 +366,20 @@ provision_vm () (
 for vm_name in $vm_names; do
   provision_vm "$vm_name" &
 done
-wait
+
+nb_errors=0
+while :; do
+  wait -n && :
+  case $? in
+    0) ;;
+    127) break ;;
+    *) nb_errors=$((nb_errors + 1)) ;;
+  esac
+done
+if [ "$nb_errors" != 0 ]; then
+  die 'encountered %d errors while provisioning VMs%s.' "$nb_errors" "$vm_names"
+fi
+
 
 printf 'done provisioning VMs%s.\n' "$vm_names"
 
@@ -374,3 +387,4 @@ printf 'done provisioning VMs%s.\n' "$vm_names"
 ## Cleanup
 
 rm -Rf $tmpdir
+exit 0
diff --git a/infra/proxmox-remove.sh b/infra/proxmox-remove.sh
index 94d66d5a..a8ee2de9 100755
--- a/infra/proxmox-remove.sh
+++ b/infra/proxmox-remove.sh
@@ -112,6 +112,7 @@ proxmox () {
 }
 
 ## Way to inject different behaviour on unexpected status.
+# shellcheck disable=SC2317
 default_proxmox_sync_unexpected_status_handler () {
   die "unexpected status: '%s'" "$1"
 }
@@ -194,6 +195,7 @@ stop_vm () {
 ################################################################################
 ## Delete VM
 
+# shellcheck disable=SC2317
 proxmox_sync_unexpected_status_handler_ignore_null () {
   case $1 in
     null)
@@ -233,7 +235,19 @@ remove_vm () (
 for vm_id_or_name in $vm_ids_or_names; do
   remove_vm "$vm_id_or_name" &
 done
-wait
+
+nb_errors=0
+while :; do
+  wait -n && :
+  case $? in
+    0) ;;
+    127) break ;;
+    *) nb_errors=$((nb_errors + 1)) ;;
+  esac
+done
+if [ "$nb_errors" != 0 ]; then
+  die 'encountered %d errors while removing VMs%s.' "$nb_errors" "$vm_ids_or_names"
+fi
 
 printf 'done removing VMs%s.\n' "$vm_ids_or_names"
 
@@ -241,3 +255,4 @@ printf 'done removing VMs%s.\n' "$vm_ids_or_names"
 ## Cleanup
 
 rm -Rf $tmpdir
+exit 0