diff --git a/src/tm_mad/fs_lvm/monitor b/src/tm_mad/fs_lvm/monitor index acf95cbebd..0973f14b85 100755 --- a/src/tm_mad/fs_lvm/monitor +++ b/src/tm_mad/fs_lvm/monitor @@ -42,8 +42,8 @@ XPATH="${DRIVER_PATH}/../../datastore/xpath.rb -b $DRV_ACTION" unset i XPATH_ELEMENTS -while IFS= read -r -d '' element; do - XPATH_ELEMENTS[i++]="$element" +while IFS= read -r -d '' ELEMENT; do + XPATH_ELEMENTS[i++]="$ELEMENT" done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE_LOCATION \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/MONITOR_VM_DISKS) @@ -57,7 +57,6 @@ MONITOR_VM_DISKS="${XPATH_ELEMENTS[i++]}" # ------------ Compute datastore usage ------------- LVM_VG_PREFIX="vg-one-" -LVM_SIZE_CMD="$SUDO $VGDISPLAY --separator : --units m -o vg_size,vg_free --nosuffix --noheadings -C" MONITOR_SCRIPT=$(cat < /dev/null; then - LVM_SIZE=\$(sudo -n vgdisplay \ + LVM_SIZE=\$($SUDO $VGDISPLAY \ --separator : \ --units m \ -o vg_size,vg_free \ @@ -92,8 +91,8 @@ else fi if [ -z "\$USED_MB" -o -z "\$TOTAL_MB" -o -z "\$FREE_MB" ]; then - msg="Empty value found" - echo "\$msg: USED_MB=\$USED_MB, TOTAL_MB=\$TOTAL_MB, FREE_MB=\$FREE_MB" + MSG="Empty value found" + echo "\$MSG: USED_MB=\$USED_MB, TOTAL_MB=\$TOTAL_MB, FREE_MB=\$FREE_MB" exit 1 fi @@ -101,51 +100,64 @@ echo "USED_MB=\$USED_MB" echo "FREE_MB=\$FREE_MB" echo "TOTAL_MB=\$TOTAL_MB" -if [ $MONITOR_VM_DISKS -eq 1 ]; then - lvdata=\$($SUDO $LVS --noheadings --nosuffix --units m -o lv_name,lv_size --separator : "${LVM_VG_PREFIX}${DS_ID}" | sed -e 's/^[[:space:]]*//' | grep '^lv-one-' | sed 's/^lv-one-//' | tr '-' ':' | sort -n) - [ -z "\$lvdata" ] && exit 0 +EOF +) - vm_previous='n' +MONITOR_VM_SCRIPT=$(cat <&1)" + MONITOR_DATA=$(ssh_monitor_and_log "$HOST" "$MONITOR_SCRIPT" "Remote monitor script" 2>&1) + MONITOR_STATUS=$? + + if [ $MONITOR_VM_DISKS -eq 1 ]; then + MONITOR_DATA_VMS=$(ssh_monitor_and_log "$HOST" "$MONITOR_VM_SCRIPT" "Remote VM disks monitor script" 2>&1) + MONITOR_VMS_STATUS=$? + fi else - MONITOR_DATA="$(monitor_and_log "$MONITOR_SCRIPT" "Monitor script" 2>&1)" + MONITOR_DATA=$(monitor_and_log "$MONITOR_SCRIPT" "Monitor script" 2>&1) + MONITOR_STATUS=$? + + if [ $MONITOR_VM_DISKS -eq 1 ]; then + MONITOR_DATA_VMS=$(monitor_and_log "$MONITOR_VM_SCRIPT" "VM disks monitor script" 2>&1) + MONITOR_VMS_STATUS=$? + fi fi -MONITOR_STATUS=$? +echo $MONITOR_DATA -if [ "$MONITOR_STATUS" = "0" ]; then - echo "$MONITOR_DATA" - exit 0 -else - echo "$MONITOR_DATA" - exit $MONITOR_STATUS +if [ $MONITOR_VM_DISKS -eq 1 ]; then + send_to_monitor MONITOR_VM $MONITOR_VMS_STATUS -1 "$MONITOR_DATA_VMS" fi + +exit $MONITOR_STATUS diff --git a/src/tm_mad/shared/monitor b/src/tm_mad/shared/monitor index 53fc5558ff..e3a688b39b 100755 --- a/src/tm_mad/shared/monitor +++ b/src/tm_mad/shared/monitor @@ -42,8 +42,8 @@ XPATH="${DRIVER_PATH}/../../datastore/xpath.rb -b $DRV_ACTION" unset i XPATH_ELEMENTS -while IFS= read -r -d '' element; do - XPATH_ELEMENTS[i++]="$element" +while IFS= read -r -d '' ELEMENT; do + XPATH_ELEMENTS[i++]="$ELEMENT" done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE_LOCATION \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/BRIDGE_LIST \ /DS_DRIVER_ACTION_DATA/MONITOR_VM_DISKS) @@ -66,8 +66,8 @@ TOTAL_MB=\$(df -B1M -P $BASE_PATH 2>/dev/null | tail -n 1 | awk '{print \$2}') FREE_MB=\$(df -B1M -P $BASE_PATH 2>/dev/null | tail -n 1 | awk '{print \$4}') if [ -z "\$USED_MB" -o -z "\$TOTAL_MB" -o -z "\$FREE_MB" ]; then - msg="Empty value found" - echo "\$msg: USED_MB=\$USED_MB, TOTAL_MB=\$TOTAL_MB, FREE_MB=\$FREE_MB" + MSG="Empty value found" + echo "\$MSG: USED_MB=\$USED_MB, TOTAL_MB=\$TOTAL_MB, FREE_MB=\$FREE_MB" exit 1 fi @@ -80,42 +80,40 @@ EOF MONITOR_VM_SCRIPT=$(cat </dev/null | grep '^disk\.[0-9]\+$') -for vm in \$vms; do - vmdir="${BASE_PATH}/\${vm}" - disks=\$(ls "\$vmdir" 2>/dev/null | grep '^disk\.[0-9]\+$') + [ -z \$DISKS ] && continue - [ -z \$disks ] && continue + VM_MONITOR="" - vm_monitor="" + for DISK in \$DISKS; do + DISK_ID="\$(echo "\$DISK" | cut -d. -f2)" + DISK_SIZE="\$(du -mL "\${VMDIR}/\${DISK}" 2>/dev/null | awk '{print \$1}')" + SNAP_DIR="\${VMDIR}/\${DISK}.snap" - for disk in \$disks; do - disk_id="\$(echo "\$disk" | cut -d. -f2)" - disk_size="\$(du -mL "\${vmdir}/\${disk}" 2>/dev/null | awk '{print \$1}')" - snap_dir="\${vmdir}/\${disk}.snap" + [ -z "\$DISK_SIZE" ] && continue - [ -z "\$disk_size" ] && continue + VM_MONITOR="\${VM_MONITOR} DISK_SIZE = [ ID=\${DISK_ID}, SIZE=\${DISK_SIZE}]" - vm_monitor="\${vm_monitor} DISK_SIZE = [ ID=\${disk_id}, SIZE=\${disk_size}]" + if [ -e "\$SNAP_DIR" ]; then + SNAPS="\$(ls "\$SNAP_DIR" 2>/dev/null | grep '^[0-9]$')" - if [ -e "\$snap_dir" ]; then - snaps="\$(ls "\$snap_dir" 2>/dev/null | grep '^[0-9]$')" + for SNAP in \$SNAPS; do + SNAP_SIZE="\$(du -mL "\${SNAP_DIR}/\${SNAP}" 2>/dev/null | awk '{print \$1}')" + [ -z "\$SNAP_SIZE" ] && continue - for snap in \$snaps; do - snap_size="\$(du -mL "\${snap_dir}/\${snap}" 2>/dev/null | awk '{print \$1}')" - [ -z "\$snap_size" ] && continue - - vm_monitor="\${vm_monitor}\nSNAPSHOT_SIZE = "\ - "[ ID=\${snap}, DISK_ID=\${disk_id}, SIZE=\${snap_size}]" + VM_MONITOR="\${VM_MONITOR}\nSNAPSHOT_SIZE = "\ + "[ ID=\${SNAP}, DISK_ID=\${DISK_ID}, SIZE=\${SNAP_SIZE}]" done fi done - vm_monitor_b64="\$(echo \$vm_monitor | base64 -w 0)" - echo "VM=[ID=\$vm, MONITOR=\"\$vm_monitor_b64\"] " + VM_MONITOR_B64="\$(echo \$VM_MONITOR | base64 -w 0)" + echo "VM=[ID=\$VM, MONITOR=\"\$VM_MONITOR_B64\"] " done EOF