首页 > 系统相关 >Xenserver批量运维脚本

Xenserver批量运维脚本

时间:2023-08-02 17:03:20浏览次数:47  
标签:运维 批量 read 虚拟机 vm echo Xenserver 033 name

可实现如下功能:

你正在运行Xenserver脚本程序,有如下功能可选择

1 显示当前系统虚拟机列表

2 批量添加虚拟机磁盘

3 批量设置防鼠标漂移

4 虚拟机异常卡死处理

5 虚拟机后缀占位符设置,默认VDI-001 占位符3 若VDI-01 占位符2

6 功能说明手册

0 退出程序运行

#!/bin/bash
pdd=3 # 虚拟机后缀占位符,默认值为3显示001开始

add_disk() {
    echo "你的存储存储信息如下"
    display=$(xe sr-list | awk -F ":" '/name-label/{print $NF}' | cat -n)
    echo "$display"
    read -p "请输入你选择的序号:" num
    chosen_name=$(xe sr-list | awk -F ":" '/name-label/{print $NF}' | sed -n "${num}p" | sed -e 's/^[[:space:]]*//')
    uid=$(xe sr-list name-label="$chosen_name" params=uuid --minimal)
    echo "已选出存储$chosen_name $uid"
    read -p "请输入你要添加的虚拟磁盘大小GB:" size
    read -p "请输入虚拟机前缀:" vmname
    read -p "请输入虚拟机开始编号:" num01
    read -p "请输入虚拟机结束编号:" num02
    read -p "请输入虚拟机未添加磁盘前的磁盘数量:" num05
    echo "确认是否要执行如下虚拟机添加磁盘操作"
    printf "$vmname%0${pdd}d\n" $(seq $num01 $num02)
    read -p "确认请输入 y 确认 或 n 退出:" xuanze
    [ "$xuanze" == "y" ] && echo "开始批量操作虚拟机" || continue
    for i in $(seq $num01 $num02); do
        num03=$(printf "%0${pdd}d" $i)
        vm01=$vmname$num03
        if ! [[ $(xe vm-list name-label="$vm01") ]]; then
            echo -e "\033[31m虚拟机$vm01不存在,未创建磁盘成功\033[0m"
            sleep 1
        else
            num_conut=$(xe vm-disk-list name-label=$vm01 | grep VBD | wc -l)
            if [ $num_conut -eq $num05 ]; then
                Nvdi=$(xe vdi-create name-label=$vm01-date-$((num05+1)) type=user virtual-size="$size"GiB sr-uuid=$uid)
                vm=$(xe vm-list name-label=$vm01 --minimal)
                vbd=$(xe vbd-create device=$((num05+1)) vdi-uuid=$Nvdi vm-uuid=$vm type=Disk mode=RW)
                xe vbd-plug uuid=$vbd &>/dev/null
                sleep 1
                echo -e "\033[32m已完成虚拟机$vm01磁盘添加,添加大小为"$size"GB\033[0m"
            else
                echo -e "\033[31m虚拟机$vm01存在,但磁盘数量不满足要求$num05,未成功创建磁盘\033[0m"
            fi
        fi
    done
}
set_mouse() {
    read -p "请输入要设置鼠标防漂移的虚拟机前缀:" vmname
    read -p "请输入虚拟机开始编号:" num01
    read -p "请输入虚拟机结束编号:" num02
    echo "确认是否要执行如下虚拟机操作放鼠标漂移设置"
    printf "$vmname%0${pdd}d\n" $(seq $num01 $num02)
    read -p "确认请输入 y 确认 或 n 退出:" num04
    [ "$num04" == "y" ] && echo "开始批量操作虚拟机" || continue
    for i in $(seq $num01 $num02); do
        num03=$(printf "%0${pdd}d" $i)
        vm01=$vmname$num03
        # 检查虚拟机是否存在
        if ! [[ $(xe vm-list name-label="$vm01") ]]; then
            echo -e "\033[31m请确认虚拟机$vm01是否存在\033[0m"
            sleep 1
            continue
        fi
        uid=$(xe vm-list name-label=$vm01 --minimal)
        xe vm-param-set uuid=$uid platform:usb=true platform:usb_tablet=true
        echo -e "\033[32m已完成虚拟机$vm01鼠标防漂移设置\033[0m"
    done
}
vm_list() {
    xe vm-list | awk '/name-label/||/power-state/{print $NF}' | xargs -n2 | sort | sed '/ng$/s/running/已开机/g' | sed '/ed$/s/halted/已关机/g' | cat -n
    read -p "请选择是否继续操作开机或者关机,按y继续 | 按n退出:" power
    if [ "$power" == "y" ]; then
        read -p "请输入要启动或者关闭的虚拟机前缀:" vmname
        read -p "请输入虚拟机开始编号:" num01
        read -p "请输入虚拟机结束编号:" num02
        read -p "请输入start|stop:" set
        echo "确认是否要执行如下虚拟机$set操作"
        printf "$vmname%0${pdd}d\n" $(seq $num01 $num02)
        read -p "确认请输入 y 确认 或 n 退出:" num04
        [ "$num04" == "y" ] && echo "开始批量操作虚拟机" || continue
        for i in $(seq $num01 $num02); do
            num03=$(printf "%0${pdd}d" $i)
            vm=$vmname$num03
            if [ "$set" == "start" ]; then
                xe vm-start name-label=$vm
                [ $? -eq 0 ] && echo -e "\033[32m已启动虚拟机$vm\033[0m" || echo -e "\033[31m虚拟机$vm启动失败,请检测虚拟机状态\033[0m"
            elif [ "$set" == "stop" ]; then
                xe vm-shutdown name-label=$vm
                [ $? -eq 0 ] && echo -e "\033[32m已关闭虚拟机$vm\033[0m" || echo -e "\033[31m虚拟机$vm关闭失败,请检测虚拟机状态\033[0m"
            else
                echo -e "\033[31m输入指令错误,请输入start或stop\033[0m"
            fi
        done
    else
        echo "退出不做操作"
    fi
}

quit() {
    exit 0
}

vm_dead() {
    echo "1 销毁卡死的VM对应的domain id,迫使VM自动重启"
    echo "2 迫使VM卡死崩溃重启"
    echo "3 强制关闭 | 强制重启"
    read -p "请根据实际情况选择对应的功能:" vm_dead01
    if [ $vm_dead01 -eq 1 ]; then
        read -p "请输入你要执行销毁domain id的虚拟机名称:" vm_name
        uuid=$(xe vm-list name-label=$vm_name --minimal)
        domain_id=$(list_domains | grep $uuid | awk '{print $1}')
        sleep 2
        /opt/xensource/debug/destroy_domain -domid $domain_id
        [ $? -eq 0 ] && echo "已完完成虚拟机$vm_name的domain id销毁,对应的UUID:$uuid" || echo -e "\033[31m$vm_name执行失败,失败虚拟机的uuid$uuid\033[0m"
    elif [ $vm_dead01 -eq 2 ]; then
        read -p "请输入你要迫使卡死的虚拟机名称:" vm_name
        xe vm-list params=actions-after-crash name-label=$vm_name
        uuid=$(xe vm-list name-label=$vm_name --minimal)
        sleep 2
        domain_id=$(list_domains | grep $uuid | awk '{print $1}')
        /usr/lib/xen/bin/crash_guest $domain_id
        [ $? -eq 0 ] && echo "已完成迫使$vm_name卡死崩溃并重启,对应的UUID:$uuid" || echo -e "\033[31m$vm_name执行失败,失败虚拟机的uuid$uuid\033[0m"
    elif [ $vm_dead01 -eq 3 ]; then
        read -p "请输入你要操作的虚拟机名称:" vm_name
        read -p "输入0强制关闭 | 输入1强制重启:" vm_stop
        [ $vm_stop -eq 0 ] && xe vm-shutdown force=true name-label=$vm_name || xe vm-reboot force=true name-label=$vm_name
        sleep 3
        echo -e "\033[32m已完成虚拟机$vm_name的强制操作\033[0m"
    else
        echo -e "\033[31m指令输入有误,请重新运行\033[0m"
    fi
}
caidan() {
    echo ""
    echo "==========================================================================================="
    echo ""
    echo "温馨提示:此程序仅供测试学习,请谨慎使用。若因使用和操作不当导致一切后果自负。"
    echo ""
    echo "1. 此程序可能在某些较低版本的Xenserver系统上存在命令差异,导致执行失败。请在适当环境中进行严格验证测试"
    echo "2. 建议在生产环境使用前,在测试环境中对所有功能进行严格验证测试,以确保程序能在生产环境稳定运行"
    echo "3. 此程序已在Xenserver 8.0及以上版本进行过测试,可正常运行。"
    echo ""
    echo "功能使用说明:"
    echo ""
    echo "1. 关于输入的虚拟机前缀问题,例如你的虚拟机名称为VDI-001,前缀请输入VDI-。"
    echo "2. 关于虚拟机开始编号和结束编号,例如VDI-001至VDI-009,开始编号输入1,结束编号输入9即可"
    echo "3. 关于虚拟机占位符,例如你的虚拟机名称为VDI-001,则占位符为3代表三个位置,VDI-002的占位符为2"
    echo "4. 关于批量添加磁盘,请添加前务必确认存储空间容量足够分配,并确保程序显示的存储名称与控制台对应"
    echo "5  关于虚拟机虚拟机未添加磁盘数据说明,主要为了防止已经添加过的虚拟机重复添加,只有满足输入的指定磁盘数量虚拟机才会添加磁盘"
    echo "==========================================================================================="
    echo ""
}
while true; do
    echo "你正在运行Xenserver脚本程序,有如下功能可选择"
    echo "1 显示当前系统虚拟机列表"
    echo "2 批量添加虚拟机磁盘"
    echo "3 批量设置防鼠标漂移"
    echo "4 虚拟机异常卡死处理"
    echo "5 虚拟机后缀占位符设置,默认VDI-001 占位符3 若VDI-01 占位符2"
    echo "6 功能说明手册"
    echo "0 退出程序运行"
    read -p "请输入你要选择的序号:" num
    if [ $num -eq 1 ]; then
        vm_list
    elif [ $num -eq 2 ]; then
        add_disk
    elif [ $num -eq 3 ]; then
        set_mouse
    elif [ $num -eq 4 ]; then
        vm_dead
    elif [ $num -eq 5 ]; then
        read -p "请输入你要设置的占位符数量:" pdd
        echo -e "\033[34m当前占位符已设置为$pdd,本次程序退出之前有效\033[0m"
    elif [ $num -eq 6 ]; then
        caidan
    elif [ $num -eq 0 ]; then
        quit
    else
        echo -e "\033[31m指令输入有误,请重新运行\033[0m"
    fi
done

标签:运维,批量,read,虚拟机,vm,echo,Xenserver,033,name
From: https://blog.51cto.com/dengpeng2025/6940257

相关文章

  • 构建易于运维的 AI 训练平台:存储选型与最佳实践
    伴随着公司业务的发展,数据量持续增长,存储平台面临新的挑战:大图片的高吞吐、超分辨率场景下数千万小文件的IOPS问题、运维复杂等问题。除了这些技术难题,我们基础团队的人员也比较紧张,负责存储层运维的仅有1名同事,因而组件的易用性,一直也是我们评估的重要维度。我们尝试过文件......
  • 直击运维痛点,大数据计算引擎 EasyMR 的监控告警设计优化之路
    当企业的业务发展到一定的阶段时,在系统中引入监控告警系统来对系统/业务进行监控是必备的流程。没有监控或者没有一个好的监控,会导致开发人员无法快速判断系统是否健康;告警的实质则是“把人当服务用”,用告警通知人的方式去干预系统达到修正的目的。监控告警在企业保障系统的稳定性......
  • 【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】个人博客前后端运维部
    个人博客前端:https://lujiesheng.cn个人博客后端:https://api.lujiesheng.cn个人博客运维:https://portainer.lujiesheng.cn1.服务器准备我采用的是腾讯云轻量应用服务器(2C4G8M80G),配置如下图:安装镜像选择CentOS7.664bit:2.服务器防火墙设置添加防火墙出入站规则......
  • 请求示例curl获取淘宝1688京东等电商平台商品详情数据API接口,批量采集
    获得页面使用命令:curlhttp://curl.haxx.se这是最简单的使用方法。用这个命令获得了http://curl.haxx.se指向的页面,同样,如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档,那么缺省的将只显示文件头部,即HTML文档的header。要全部显示,请加参数......
  • Python超实用!批量重命名文件/文件夹,只需1行代码
    大家好,这里是程序员晚枫,之前在小破站给大家分享了一个视频:批量重命名文件。最近在程序员晚枫的读者群里,发现很多朋友对这个功能很感兴趣,尤其是对下一步的优化:批量重命名文件夹。这周我利用下班时间,把这个功能改进了一下,增加了几个可选的功能,我们一起来看一下吧~批量重命名文件......
  • ArcPy批量掩膜、重采样大量遥感影像
      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作。  首先,我们来明确一下本文的具体需求。现有一个存储有大量.tif格式遥感影像的文件夹;且其中除了.tif格式的遥感影像文件外,还具有其它格式的文件。  我们希望,依据一个已知的面要素矢......
  • 批量在变量的第十位上加上数字0
    对于上面的数据变量ID,我们需要在ID变量的第十位上批量加上数字0,我们利用R语言来完成1.首先用R语言打开该SPSS文件 2.分别将数据变量ID这个字符串拆分为前8个字符和后两个字符,然后用paste函数将他们相连,paste中的参数sep设置为sep="0" 3.将新变量newID写入到newID.txt文......
  • 根据URL批量下载文件并压缩成zip文件
    根据url批量下载图片或者视频,只需要将图片的url和名称放到数组对象即可,例如:letfileArr=[{fvUrl:'https://image.xuboren.com/image/2023/07/26/1410829074764cdbaa4314a084eb749e.jpg',fvName:'图片名称'},{fvUrl:'https://image.xuboren.com/image/2023/07/......
  • 大型集团企业一体化运维监控方案
        当前,云计算、大数据、人工智能等IT技术迅猛发展,企业的信息化步入了一个崭新的时代,企业规模不断壮大,业务不断拓展,企业信息化依赖的网络结构和IT技术越来越复杂。企业运维部门采用的运维工具和技术实力直接决定企业是否能提供稳定、可靠、快速、优质的服务。但传统网管......
  • Python实现批量将ppt转换为pdf
    这是一个Python脚本,能够批量地将微软Powerpoint文件(.ppt或者.pptx)转换为pdf格式。使用说明1、将这个脚本跟PPT文件放置在同一个文件夹下。2、运行这个脚本。全部代码1234567891011121314151617181920212223import comtypes.clientimport osdef init_powerpoint():powerpoint =......