首页 > 其他分享 >4、虚拟机单机、集群的克隆、删除脚本(以初始化好的虚拟机为模板)

4、虚拟机单机、集群的克隆、删除脚本(以初始化好的虚拟机为模板)

时间:2023-06-03 17:05:10浏览次数:69  
标签:初始化 End read 虚拟机 list echo dname virsh 模板

虚拟机克隆、删除脚本
[root@ubunt ~]# cat clone.sh 
#!/bin/bash
#
#. /etc/init.d/functions   (如果是ubuntu,注释此行)

Red="\e[1;31m"
Purple="\e[1;35m"
Green="\e[1;32m"
Blue="\e[1;36m"
Yellow="\e[1;33m"
End="\e[0m"

#克隆集群
clone() {
    lists=`virsh list --all |awk '/.*template.*/{print $2}'`
    echo "模板清单:"
    echo "<-------------------->"
    for x in  $lists;do
        echo -e "$Purple$x$End"
    done
    echo "<-------------------->"
    read -p "请输入克隆模板: " template
    #read -p "请输入克隆模板ip: " ip
    read -p "请输入集群名称: "  name
    read -p "请输入节点数: "    node
    read -p "请输入ip起点x(y.y.y.x): " num
    for  ((i=0;i<$node;i++)) ;do
         let n=$i+1
         arg[$i]="$name-0$n"
         virt-clone -o $template -n ${arg[$i]}  -f /var/lib/libvirt/images/${arg[$i]}.qcow2 || continue
         virsh start ${arg[$i]} ||  continue
         sleep 30
         echo $num ${arg[$i]}
     if [[ $template =~ "ubuntu" ]];then
             ssh [email protected] "sed -i -r 's@(^[[:space:]]+- 10.0.0.)[0-9]+@\1$num@' /etc/netplan/00-installer-config.yaml;hostnamectl set-hostname ${arg[$i]} ;reboot"
         else 
             ssh [email protected] "sed -i -r 's@(^IPADDR=).*@\1192.168.122.$num@' /etc/sysconfig/network-scripts/ifcfg-eth0;hostnamectl set-hostname ${arg[$i]} ;reboot"         
         fi 
         let num=$num+1
    done
}

#删除集群
delete(){
    lists1=`virsh  list --all | awk 'NR!=1{print $2}'|sed -nr "s/^(.*)-[0-9]+$/\1/p" |uniq`
    echo "<-------------------->"
    for n in $lists1 ;do
    echo -e "$Purple$n$End"
    done
    echo "<-------------------->"
    dname=1
    echo $dname
    read -p "请输入集群名称:"  dname
    echo $danme
    for i in `virsh list --all| awk -v dname=$dname '$0 ~ dname{print $2}'`;do
    echo -e  "$Red$i$End"
    if [[ $i =~ "template" ]]; then
    continue;    
    elif [[ $dname ==  "" ]];then
    action "删除失败" false
        exit
    else
        virsh destroy $i &> /dev/null
        virsh  undefine --remove-all-storage $i &> /dev/null && action "删除成功" true  || action "删除失败" false 
    fi
    done
}

#单节点启动
nodestart(){
    echo "<-------------------->"
    for m in `virsh  list --all | egrep ".*off$"|awk '{print $2}'` ;do
        echo -e "$Purple$m$End"
    done
    echo "<-------------------->"
    read -p "请输入节点名称:"  startnode
    virsh start $startnode &> /dev/null &&  action "$startnode 节点启动成功" true || action "$startnode 节点启动失败" false
}

#单节点重启
noderestart(){
    echo "<-------------------->"
    for o in `virsh  list --all | egrep ".*running$"|awk '{print $2}'` ;do
        echo -e "$Purple$o$End"
    done
    echo "<-------------------->"
    read -p "请输入节点名称:"  restartnode
    virsh reboot $restartnode &> /dev/null &&  action "$restartnode 节点重启成功" true || action "$restartnode 节点重启失败" false
}

#单节点关机
nodestop(){
    echo "<-------------------->"
    for p in `virsh  list --all | egrep ".*running$"|awk '{print $2}'` ;do
        echo -e "$Purple$p$End"
    done
    echo "<-------------------->"
    read -p "请输入节点名称:"  stopnode
    virsh shutdown $stopnode &> /dev/null &&  action "$stopnode 节点关机成功" true || action "$stopnode 节点关机失败" false
}

#启动集群
clusterstart(){
    lists2=`virsh  list --all | awk 'NR!=1{print $2}'|sed -nr "s/^(.*)-[0-9]+$/\1/p"|sort -nr|uniq`
    echo "<-------------------->"
    for q in $lists2 ;do
        echo -e "$Purple$q$End"
    done
    echo "<-------------------->"
    read -p "请输入集群名称:"  dname
    for i1 in `virsh list --all| awk -v dname=$dname '$0 ~ dname{print $2}'`;do
    echo -e  "$Red$i1$End"
    virsh start $i1 &> /dev/null &&  action "$i1 节点启动成功" true || action "$i1 节点启动失败" false
    done

}

#关闭集群
clusterstop(){
    lists3=`virsh  list --all | awk 'NR!=1{print $2}'|sed -nr "s/^(.*)-[0-9]+$/\1/p" |sort -nr|uniq`
    echo "<-------------------->"
    for r in $lists3 ;do
        echo -e "$Purple$r$End"
    done
    echo "<-------------------->"
    read -p "请输入集群名称:"  dname
    for i2 in `virsh list --all| awk -v dname=$dname '$0 ~ dname{print $2}'`;do
    echo -e  "$Red$i2$End"
    virsh shutdown $i2 &> /dev/null &&  action "$i2 节点关闭成功" true || action "$i2 节点关闭失败" false
    done
}

#集群重启
clusterrestart(){
    lists4=`virsh  list --all | awk 'NR!=1{print $2}'|sed -nr "s/^(.*)-[0-9]+$/\1/p" | sort -nr|uniq`
    echo "<-------------------->"
    for s in $lists4 ;do
        echo -e "$Purple$s$End"
    done
    echo "<-------------------->"
    read -p "请输入集群名称:"  dname
    for i3 in `virsh list --all| awk -v dname=$dname '$0 ~ dname{print $2}'`;do
    echo -e  "$Red$i3$End"
    virsh reboot $i3 &> /dev/null &&  action "$i3 节点重启成功" true || action "$i3 节点重启失败" false
    done

}


#单机克隆
clone_Single(){
    echo "<-------------------->"
    for p in `virsh  list --all |awk '{print $2}'` ;do
        echo -e "$Purple$p$End"
    done
    echo "<-------------------->"
    read -p "请输入克隆模板: " templatecs
    #read -p "请输入克隆模板ip: " ip
    read -p "请输入名称: " csname
    read -p "请输入ipx(y.y.y.x): " num1
         virt-clone -o $templatecs -n $csname  -f /var/lib/libvirt/images/$csname.qcow2 || continue
         virsh start $csname ||  continue
         sleep 60
         echo $csname
         if [[ $templatecs =~ "ubuntu" ]];then
             ssh [email protected] "sed -i -r 's@(^[[:space:]]+- 10.0.0.)[0-9]+@\1$num1@' /etc/netplan/00-installer-config.yaml;hostnamectl set-hostname $csname ;reboot"
         else
             ssh [email protected] "sed -i -r 's@(^IPADDR=).*@\1192.168.10.$num1@' /etc/sysconfig/network-scripts/ifcfg-eth0;hostnamectl set-hostname $csname ;reboot"
         fi
}

#单机删除
delete_Single(){
    echo "<-------------------->"
    for p in `virsh  list --all |awk '{print $2}'` ;do
        echo -e "$Purple$p$End"
    done
    echo "<-------------------->"
    read -p "请输入机器名称:"  dsname
    echo $dsname
    if [[ $i =~ "template" ]]; then
        exit;
    elif [[ $dsname ==  "" ]];then
        action "删除失败" false
        exit
    else
        virsh  destroy $dsname &> /dev/null
        virsh  undefine --remove-all-storage $dsname &> /dev/null && action "删除成功" true  || action "删除失败" false
    fi

}

#创建快照
create_snapshot(){
    echo "<-------------------->"
    for p in `virsh  list --all |awk '{print $2}'` ;do
        echo -e "$Purple$p$End"
    done
    echo "<-------------------->"
    read -p "请选择你要创建快照的机器:" shname
    virsh snapshot-list $shname
    read -p "请输入创建的快照名称:" createsnap
    virsh snapshot-create-as $shname $createsnap  && echo -e "$Blue 创建成功  $End"  || echo -e "$Red 创建失败 $End"
    virsh snapshot-list $shname
}


#删除快照
delete_snapshot(){
    echo "<-------------------->"
    for p in `virsh  list --all |awk '{print $2}'` ;do
        echo -e "$Purple$p$End"
    done
    echo "<-------------------->"
    read -p "请输入你要删除快照的机器:" dshname
    virsh snapshot-list $dshname
    read -p "请输入删除的快照名称:" deletesnap
    virsh snapshot-delete $dshname $deletesnap && echo -e "$Blue 删除成功  $End"  || echo -e "$Red 删除失败 $End"
    virsh snapshot-list $dshname
}


#恢复快照
recover_snapshot(){
    echo "<-------------------->"
    for p in `virsh  list --all |awk '{print $2}'` ;do
        echo -e "$Purple$p$End"
    done
    echo "<-------------------->"
    read -p "请输入你要恢复快照的机器:" rshname
    virsh snapshot-list $rshname
    read -p "请输入恢复的快照名称:" recoversnap
    virsh snapshot-revert $rshname  $recoversnap  && echo -e "$Blue 恢复成功  $End"  || echo -e "$Red 恢复失败 $End"
    virsh snapshot-list $rshname
}


virsh list --all
PS3="请按要求输入操作选项:"
select lists in  克隆集群 删除集群 启动集群 关闭集群 集群重启  单节点启动 单节点关机  单节点重启   克隆单机  单机删除 创建快照  删除快照  恢复快照   退出;do
case $REPLY in     #  1       2       3        4        5          6          7           8           9         10       11        12        13
1)
    echo -e "$Blue$lists$End"
    clone
    ;;
2)  
    echo -e "$Red$lists$End"
    delete
    ;;
3)  
    echo -e "$Green$lists$End"
    clusterstart
    ;;
4)
    echo -e "$Red$lists$End"
    clusterstop
    ;;
5)
    echo -e "$Yellow$lists$End"
    clusterrestart
    ;;
6)
    echo -e "$Green$lists$End"
    nodestart
    ;;
7)
    echo -e "$Red$lists$End"
    nodestop
    ;;
8)
    echo -e "$Yellow$lists$End"
    noderestart
    ;;

9)
    echo -e "$Blue$lists$End"
    clone_Single
    ;;
10)
    echo -e "$Blue$lists$End"
    delete_Single
    ;;
11)
    echo -e "$Blue$lists$End"
    create_snapshot
    ;;
12)
    echo -e "$Blue$lists$End"
    delete_snapshot
    ;;
13)
    echo -e "$Blue$lists$End"
    recover_snapshot
    ;;
14)
    echo -e "$Blue$lists$End"
    exit
    ;;
*)
    echo -e "$Red输入错误$End"
    ;;
esac
done


标签:初始化,End,read,虚拟机,list,echo,dname,virsh,模板
From: https://blog.51cto.com/mfc001/6408229

相关文章

  • 38 KVM管理设备-管理虚拟机USB
    38KVM管理设备-管理虚拟机USB为了方便在虚拟机内部使用USBkey设备、USB海量存储设备等USB设备,openEuler提供了USB设备直通的功能。用户可以通过USB直通和热插拔相关接口给虚拟机配置直通USB设备、或者在虚拟机处于运行的状态下热插/热拔USB设备。38.1配置USB控制器38.1.1概述......
  • 1、KVM安装部署及virt-manager图形化工具创建安装虚拟机、命令行工具virt-install创建
    KVM安装部署KVM做单机管理虚拟机,Openstack集群管理虚拟机docker单机管理容器,k8s集群管理容器宿主机环境准备在vmware安装linux系统,并在设置中开启虚拟化CPU开启虚拟化一:开启虚拟化引擎两项内容二:提高内存和处理器至8G验证开启虚拟化grep-Em1"vmx|svm"/proc/cpuinfoInt......
  • VMWare 虚拟机安装系统出现unsuccessful EFI Network
    问题:解决方法:重新打开虚拟机内的系统就可以安装了......
  • VMware虚拟机安装Windows Server 2022
    硬件要求处理器:1.4GHz64位处理器,与x64指令集兼容内存(RAM):800MB(对于带桌面体验的服务器安装选项为2GB)磁盘存储空间:32GB网络适配器:以太网适配器的吞吐量至少为1GB/秒、符合PCIExpress体系结构规范准备工作①VMwareWorkstation软件(演示版本:vmware-workstation-full-16.2......
  • php调用html模板
    在PHP中调用HTML模板,通常可以使用模板引擎来实现,例如Smarty、Twig等。以下是一个使用Smarty模板引擎的示例代码:<!--HTML模板文件template.html--><html><head><title>{$title}</title></head><body><h1>{$header}</h1>{foreach$i......
  • 国产化麒麟系统在window系统上用hyper-v搭建虚拟机环境QT安装文件传输步骤
    团队自研股票软件关注微信公众号:QStockView,下载1    麒麟系统国产化hyper-v虚拟机环境经验1.1 简介随着国际环境的变化,软硬件国产化是现在迫切的需求,只有实现了自主研发,才能自立自强,才能实现民族伟大复兴,才能实现祖国的繁荣昌盛。为了实现这一目标,需要从window开发运......
  • react初始化项目
    初始化基础的项目npminstall-gcreate-react-appcreate-react-appmy-appcdmy-appnpmstart箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。......
  • 4、Ansible模板--用于根据每个主机的不同环境而为生成不同的文件
    ansible模板模板是一个文本文件,可以用于根据每个主机的不同环境而为生成不同的文件模板文件中支持嵌套jinja2语言的指令,来实现变量,条件判断,循环等功能需要使用template模块实现文件的复制到远程主机,但和copy模块不同,复制过去的文件每个主机可以会有所不同jinja2语言http:......
  • 如何在Spring初始化Bean或销毁Bean前执行某些操作
    阅读文本大概需要3分钟。0x01:通过在Bean中定义init-method和destory-method方法1.publicclassCar{2.3.4.publicCar(){5.System.out.println("Car'sConstructor..");6.}7.8.9.publicvoidinit(){10.System.out.println("Car'sInit...&......
  • 线段树模板题
    目录洛谷3372线段树区间加法/区间求和洛谷3373线段树区间加法/区间乘法/区间求和.洛谷3372线段树区间加法/区间求和//byDTTTTTTT2023/6/2//Luogu3372#include<iostream>#definelllonglong#definelc(p<<1)#definerc(p<<1|1)usingnamespacestd;constint......