#!/bin/bash set -eo pipefail LOG_DIR="{{ log_base_dir }}/{{ driver.name }}" # 从角色变量注入路径 LOG_FILE="${LOG_DIR}/install-$(date +%Y%m%d).log" mkdir -p "$LOG_DIR" exec > >(tee -a "$LOG_FILE") 2>&1 # 参数解析(严格匹配角色定义的操作) OPERATION="" VERSION="" while [[ $# -gt 0 ]]; do case "$1" in --install) OPERATION="install" ;; --uninstall) OPERATION="uninstall" ;; --version) VERSION="$2"; shift ;; *) echo "错误:未知参数 $1" >&2; exit 1 ;; esac shift done # 安装逻辑(使用角色专属变量) install() { local DRIVER_VERSION="${VERSION:-$DEFAULT_VERSION}" echo "[$(date)] 开始安装NVIDIA驱动(版本:$DRIVER_VERSION,型号:$GPU_MODEL)..." # 企业内部镜像下载(安全加速) wget -q "${DOWNLOAD_URL}/${DRIVER_VERSION}/NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run" \ -O "/tmp/nvidia-driver.run" # 静默安装(企业级无交互模式) sh "/tmp/nvidia-driver.run" --silent --no-x-check --no-nouveau-check # 严格功能验证(硬件型号匹配) if ! nvidia-smi --query-gpu=name --format=csv,noheader | grep -q "$GPU_MODEL"; then echo "错误:驱动安装后未识别到目标GPU型号" >&2; exit 1 fi } # 卸载逻辑(幂等性设计) uninstall() { echo "[$(date)] 开始卸载NVIDIA驱动..." /usr/bin/nvidia-uninstall --silent # 官方静默卸载工具 rm -f "/tmp/nvidia-driver.run" # 清理残留文件 } # 主流程(依赖角色变量注入的默认值) DEFAULT_VERSION="{{ driver.default_version }}" DOWNLOAD_URL="{{ driver.download_url }}" install || uninstall # 根据OPERATION执行对应函数(由剧本参数控制) exit 0