From 04bfd491add46b077e6db978d05b868052e74453 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Mon, 17 Jun 2013 16:38:12 -0400 Subject: [PATCH] Add mechanism to send error messages to helper. Adds a new err_msg function which is used to: -echo feedback to the deploy ramdisk console -keep track of the first error message we hit so that we can send it along to the baremetal-deploy-helper. Also, updates our wget request back to baremetal-deploy-helper to include the first the first error message (if any) as the 'e' parameter. The err_msg uses a new simple safe_url_encode function to ensure we don't send invalid characters in our HTTP post requests. Change-Id: I5a623a6f66cde8d81ff1e75800dc2953ca2703a8 --- elements/deploy/init | 8 ++++---- scripts/d/init-func | 30 ++++++++++++++++++++++++++++++ scripts/init | 5 +++-- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/elements/deploy/init b/elements/deploy/init index 1a8dd258..53f58506 100644 --- a/elements/deploy/init +++ b/elements/deploy/init @@ -1,5 +1,5 @@ if [ -z "$ISCSI_TARGET_IQN" ]; then - echo "iscsi_target_iqn is not defined" + err_msg "iscsi_target_iqn is not defined" troubleshoot fi @@ -13,19 +13,19 @@ while ! target_disk=$(find_disk "$DISK"); do done if [ -z "$target_disk" ]; then - echo "Could not find disk to use." + err_msg "Could not find disk to use." troubleshoot fi echo "start iSCSI target on $target_disk" start_iscsi_target "$ISCSI_TARGET_IQN" "$target_disk" ALL if [ $? -ne 0 ]; then - echo "Failed to start iscsi target." + err_msg "Failed to start iscsi target." troubleshoot fi echo "request boot server to deploy image" -d="i=$DEPLOYMENT_ID&k=$DEPLOYMENT_KEY&a=$BOOT_IP_ADDRESS&n=$ISCSI_TARGET_IQN" +d="i=$DEPLOYMENT_ID&k=$DEPLOYMENT_KEY&a=$BOOT_IP_ADDRESS&n=$ISCSI_TARGET_IQN&e=$FIRST_ERR_MSG" wget --post-data "$d" "http://$BOOT_SERVER:10000" echo "waiting for notice of complete" diff --git a/scripts/d/init-func b/scripts/d/init-func index 6e45d334..a9ae8f67 100755 --- a/scripts/d/init-func +++ b/scripts/d/init-func @@ -195,3 +195,33 @@ function troubleshoot() { fi } +function safe_url_encode() { + local str=$1 + local out="" + + for (( i=0; i<${#str}; i++ )); do + c=${str:$i:1} + case $c in + [a-zA-Z0-9.-_] ) + out+="$c" + ;; + ' ' ) + out+="+" + ;; + *) + #skip it + ;; + esac + done + echo "$out" + +} + +function err_msg() { + message=$1 + if [ -z "$FIRST_ERR_MSG" ]; then + FIRST_ERR_MSG=$(safe_url_encode "$message") + fi + echo "$message" +} + diff --git a/scripts/init b/scripts/init index 7bf9aef8..9e9db7a2 100644 --- a/scripts/init +++ b/scripts/init @@ -48,6 +48,7 @@ readonly DEPLOYMENT_ID=$(get_kernel_parameter deployment_id) readonly DEPLOYMENT_KEY=$(get_kernel_parameter deployment_key) readonly ISCSI_TARGET_IQN=$(get_kernel_parameter iscsi_target_iqn) readonly TROUBLESHOOT=$(get_kernel_parameter troubleshoot) +FIRST_ERR_MSG= mount -t sysfs none /sys @@ -110,7 +111,7 @@ while ! BOOT_INTERFACE=$(find_interface "$BOOT_MAC_ADDRESS"); do sleep 5 done if [ -z "$BOOT_INTERFACE" ]; then - echo "could not find an interface owns MAC=$BOOT_MAC_ADDRESS" + err_msg "Could not find an interface that owns MAC: $BOOT_MAC_ADDRESS" troubleshoot fi @@ -122,7 +123,7 @@ if [ $? -ne 0 ]; then sleep 10 ifconfig "$BOOT_INTERFACE" up if [ $? -ne 0 ]; then - echo "Failed to up $BOOT_INTERFACE" + err_msg "Failed to ifconfig up $BOOT_INTERFACE" troubleshoot fi fi