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:
parent
5504856b32
commit
2fc3e6e61c
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user