71 lines
1.9 KiB
Bash
71 lines
1.9 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 dg disks
|
||
|
|
|
||
|
|
missing=0
|
||
|
|
for cmd in vxdg vxdisk vxprint tr; do
|
||
|
|
require_cmd "$cmd" || missing=1
|
||
|
|
done
|
||
|
|
|
||
|
|
if (( missing != 0 )); then
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
|
||
|
|
if ! vxdg list "$DISKGROUP" >/dev/null 2>&1; then
|
||
|
|
critical "diskgroup not found: $DISKGROUP"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
ok "diskgroup exists: $DISKGROUP"
|
||
|
|
|
||
|
|
status=0
|
||
|
|
for disk in $DISKS; do
|
||
|
|
if ! vxdisk list "$disk" >/dev/null 2>&1; then
|
||
|
|
critical "disk not found in vxdisk list: $disk"
|
||
|
|
status=1
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
summary="$(vxdisk list 2>/dev/null | awk -v disk="$disk" '$1 == disk {print $0}')"
|
||
|
|
if [[ -z "$summary" ]]; then
|
||
|
|
warning "unable to find summary row for $disk; using detailed status only"
|
||
|
|
elif printf '%s\n' "$summary" | awk '{print $3}' | grep -qv '^-'; then
|
||
|
|
critical "disk '$disk' appears to belong to a diskgroup: $summary"
|
||
|
|
status=1
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
info="$(disk_status_line "$disk")"
|
||
|
|
disk_status="${info#*|}"
|
||
|
|
if [[ "$disk_status" == *"online invalid"* ]]; then
|
||
|
|
critical "disk '$disk' is still online invalid; initialize it before adding to a diskgroup"
|
||
|
|
status=1
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
ok "disk '$disk' appears initialized and unassigned"
|
||
|
|
done
|
||
|
|
|
||
|
|
if (( status != 0 )); then
|
||
|
|
critical "one or more disks failed validation; diskgroup extension not attempted"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
confirm_execute "This will add disk(s) '$DISKS' to VxVM diskgroup '$DISKGROUP'."
|
||
|
|
|
||
|
|
for disk in $DISKS; do
|
||
|
|
alias_base="$(printf '%s_%s' "$DISKGROUP" "$disk" | tr -c 'A-Za-z0-9_' '_')"
|
||
|
|
run_cmd "Add disk $disk to diskgroup $DISKGROUP as $alias_base" vxdg -g "$DISKGROUP" adddisk "${alias_base}=${disk}"
|
||
|
|
done
|
||
|
|
|
||
|
|
capture_cmd "Diskgroup details after extension" vxdg list "$DISKGROUP"
|
||
|
|
capture_cmd "VxVM layout after diskgroup extension" vxprint -g "$DISKGROUP" -ht
|
||
|
|
ok "diskgroup extension step completed"
|