#!/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 . "$SCRIPT_DIR/00_env.sh" DEVICES="" SERVERS="" OUTPUT="" usage() { printf 'Usage: %s --fs --devices "/dev/sdb /dev/sdc" --servers "node1,node2" --failure-group --pool --usage [--output ]\n' "$(basename "$0")" } while [[ "$#" -gt 0 ]]; do case "$1" in --fs) FILESYSTEM="${2:-}"; shift 2 ;; --devices) DEVICES="${2:-}"; shift 2 ;; --servers) SERVERS="${2:-}"; shift 2 ;; --failure-group) FAILURE_GROUP="${2:-}"; shift 2 ;; --pool) STORAGE_POOL="${2:-}"; shift 2 ;; --usage) USAGE="${2:-}"; shift 2 ;; --output) OUTPUT="${2:-}"; shift 2 ;; -h|--help) usage; exit 0 ;; *) critical "Unknown argument: $1"; usage; exit 2 ;; esac done if [[ -z "$FILESYSTEM" || -z "$DEVICES" || -z "$SERVERS" || -z "$FAILURE_GROUP" || -z "$STORAGE_POOL" || -z "$USAGE" ]]; then critical "Missing required input" usage exit 2 fi if ! [[ "$FAILURE_GROUP" =~ ^-?[0-9]+$ ]]; then critical "--failure-group must be an integer" exit 2 fi if ! usage_value_valid "$USAGE"; then critical "--usage must be one of: dataOnly, metadataOnly, dataAndMetadata" exit 2 fi if [[ -z "$OUTPUT" ]]; then OUTPUT="/tmp/gpfs_nsd_${FILESYSTEM}_${TIMESTAMP}.stanza" fi safe_fs="$(printf '%s' "$FILESYSTEM" | tr -c '[:alnum:]_' '_')" { printf '# Generated GPFS NSD stanza for filesystem %s\n' "$FILESYSTEM" printf '# Review with storage and cluster teams before use.\n\n' for device in $DEVICES; do if [[ "$device" != /dev/* ]]; then critical "Device must be an absolute /dev path: $device" exit 2 fi device_base="$(basename "$device" | tr -c '[:alnum:]_' '_')" nsd_name="nsd_${safe_fs}_${device_base}" printf '%%nsd:\n' printf ' device=%s\n' "$device" printf ' nsd=%s\n' "$nsd_name" printf ' servers=%s\n' "$SERVERS" printf ' usage=%s\n' "$USAGE" printf ' failureGroup=%s\n' "$FAILURE_GROUP" printf ' pool=%s\n\n' "$STORAGE_POOL" done } > "$OUTPUT" ok "Generated NSD stanza: $OUTPUT" warning "This script only writes a stanza file. It does not create NSDs or modify GPFS."