#!/usr/bin/env bash set -euo 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"