1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-22 18:50:08 +03:00

B #4793: Fix VM disks monitoring for LVM

* All variables upper-case, remove unused
This commit is contained in:
Pavel Czerný 2020-06-02 11:15:28 +02:00 committed by GitHub
parent 5504856b32
commit 2fc3e6e61c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 72 additions and 62 deletions

View File

@ -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 <<EOF
if [ ! -d $BASE_PATH ]; then
@ -67,7 +66,7 @@ fi
# If vg-one-$DS_ID exists, we assume it's an fs_lvm image datastore, therefore'
# we return the space of the lvm, no of the filesystem
if PATH=\$PATH:/sbin:/bin:/usr/sbin:/usr/bin which vgdisplay &> /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 <<EOF
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
while IFS="\n" read -r line; do
vm=\$(echo "\$line" | cut -d':' -f1)
[ -n "\$vm" ] || continue
VM_PREVIOUS='n'
disk=\$(echo "\$line" | cut -d':' -f2)
size=\$(echo "\$line" | cut -d':' -f3 | cut -d'.' -f1)
while IFS="\n" read -r LINE; do
VM=\$(echo "\$LINE" | cut -d':' -f1)
[ -n "\$VM" ] || continue
if [ "\$vm" != "\$vm_previous" ]; then
[ "\$vm_previous" != "n" ] && echo "\"]"
DISK=\$(echo "\$LINE" | cut -d':' -f2)
SIZE=\$(echo "\$LINE" | cut -d':' -f3 | cut -d'.' -f1)
vm_previous="\$vm"
echo -n "VM=[ID=\$vm,POLL=\""
else
echo -n " "
fi
if [ "\$VM" != "\$VM_PREVIOUS" ]; then
[ "\$VM_PREVIOUS" != "n" ] && echo "\"]"
echo -n "DISK_SIZE=[ID=\$disk,SIZE=\$size]"
VM_PREVIOUS="\$VM"
echo -n "VM=[ID=\$VM,MONITOR=\""
else
echo -n " "
fi
done <<< "\$( echo "\$lvdata" )"
MONITOR_B64="\$(echo -n "DISK_SIZE=[ID=\$DISK,SIZE=\$SIZE]" | base64 -w 0)"
echo -n "\$MONITOR_B64"
[ "\$vm_previous" != "n" ] && echo "\"]"
fi
done <<< "\$( echo "\$LVDATA" )"
[ "\$VM_PREVIOUS" != "n" ] && echo "\"]"
EOF
)
if [ -n "$BRIDGE_LIST" ]; then
HOST=`get_destination_host`
MONITOR_DATA="$(ssh_monitor_and_log "$HOST" "$MONITOR_SCRIPT" "Remote monitor script" 2>&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

View File

@ -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 <<EOF
vms=\$(ls "$BASE_PATH" | grep '^[0-9]\+$')
VMS=\$(ls "$BASE_PATH" | grep '^[0-9]\+$')
monitor=""
for VM in \$VMS; do
VMDIR="${BASE_PATH}/\${VM}"
DISKS=\$(ls "\$VMDIR" 2>/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