95 lines
2.5 KiB
Bash
95 lines
2.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -o errexit
|
||
|
|
set -o nounset
|
||
|
|
set -o pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
# shellcheck source=00_env.sh
|
||
|
|
source "$SCRIPT_DIR/00_env.sh"
|
||
|
|
|
||
|
|
parse_common_args "$@"
|
||
|
|
require_inputs sg dg vol mount
|
||
|
|
|
||
|
|
missing=0
|
||
|
|
for cmd in hastatus hagrp hares vxdisk vxdg vxprint df findmnt; do
|
||
|
|
require_cmd "$cmd" || missing=1
|
||
|
|
done
|
||
|
|
|
||
|
|
if (( missing != 0 )); then
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
|
||
|
|
status=0
|
||
|
|
ok "Precheck started for service group '$SERVICE_GROUP', diskgroup '$DISKGROUP', volume '$VOLUME'"
|
||
|
|
log "INFO" "log file: $LOG_FILE"
|
||
|
|
|
||
|
|
if hastatus -sum >/dev/null 2>&1; then
|
||
|
|
ok "VCS status is available"
|
||
|
|
else
|
||
|
|
critical "VCS does not appear to be running or hastatus failed"
|
||
|
|
status=1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if hagrp -display "$SERVICE_GROUP" >/dev/null 2>&1; then
|
||
|
|
ok "service group exists: $SERVICE_GROUP"
|
||
|
|
else
|
||
|
|
critical "service group not found: $SERVICE_GROUP"
|
||
|
|
status=1
|
||
|
|
fi
|
||
|
|
|
||
|
|
group_state="$(hagrp -state "$SERVICE_GROUP" 2>/dev/null || true)"
|
||
|
|
printf '%s\n' "$group_state" | tee -a "$LOG_FILE"
|
||
|
|
if printf '%s\n' "$group_state" | grep -qi "ONLINE"; then
|
||
|
|
ok "service group is online"
|
||
|
|
else
|
||
|
|
critical "service group is not online"
|
||
|
|
status=1
|
||
|
|
fi
|
||
|
|
|
||
|
|
online_node="$(printf '%s\n' "$group_state" | awk '/ONLINE/ {print $NF; exit}')"
|
||
|
|
if [[ -n "$online_node" ]]; then
|
||
|
|
ok "possible online node: $online_node"
|
||
|
|
else
|
||
|
|
warning "unable to identify online node from hagrp output"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if vxdg list "$DISKGROUP" >/dev/null 2>&1; then
|
||
|
|
ok "diskgroup exists: $DISKGROUP"
|
||
|
|
else
|
||
|
|
critical "diskgroup not found: $DISKGROUP"
|
||
|
|
status=1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if vxprint -g "$DISKGROUP" "$VOLUME" >/dev/null 2>&1; then
|
||
|
|
ok "volume exists: $VOLUME"
|
||
|
|
else
|
||
|
|
critical "volume not found in diskgroup: $VOLUME"
|
||
|
|
status=1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if findmnt --target "$MOUNTPOINT" >/dev/null 2>&1; then
|
||
|
|
ok "mountpoint is mounted: $MOUNTPOINT"
|
||
|
|
fs_type="$(findmnt --noheadings --output FSTYPE --target "$MOUNTPOINT" | awk 'NR == 1 {print $1}')"
|
||
|
|
ok "filesystem type: ${fs_type:-unknown}"
|
||
|
|
else
|
||
|
|
critical "mountpoint is not mounted: $MOUNTPOINT"
|
||
|
|
status=1
|
||
|
|
fi
|
||
|
|
|
||
|
|
capture_cmd "Current filesystem usage" df -h "$MOUNTPOINT" || status=1
|
||
|
|
capture_cmd "Current VxVM layout" vxprint -g "$DISKGROUP" -ht || status=1
|
||
|
|
capture_cmd "Current VCS service group display" hagrp -display "$SERVICE_GROUP" || status=1
|
||
|
|
if hares -display 2>/dev/null | grep -F "$SERVICE_GROUP" | tee -a "$LOG_FILE"; then
|
||
|
|
ok "displayed VCS resources related to service group: $SERVICE_GROUP"
|
||
|
|
else
|
||
|
|
warning "no VCS resource display rows matched service group: $SERVICE_GROUP"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if (( status == 0 )); then
|
||
|
|
ok "precheck completed successfully"
|
||
|
|
else
|
||
|
|
critical "precheck found one or more issues"
|
||
|
|
fi
|
||
|
|
|
||
|
|
exit "$status"
|