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

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

时间:2023-12-05 11:47:31浏览次数:39  
标签:初始化 End read 虚拟机 list echo dname virsh 模板

摘自:https://blog.51cto.com/mfc001/6408229

 

虚拟机克隆、删除脚本
[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://www.cnblogs.com/LiuYanYGZ/p/17876866.html

相关文章

  • 5、半虚拟化驱动--virtio(linux和windows)和安装Windows server虚拟机
    摘自:https://blog.51cto.com/mfc001/6410315KVM的功能主要体现在利用KVM的硬件辅助性虚拟化可以提高处理速度。但在虚拟机中,有些硬件不是KVM来实现加速的,如磁盘、内存、网络的性能,如果更好的提升速度,需要安装半虚拟化驱动1.2.3.  半虚拟化驱动在软......
  • 6、虚拟机在宿主机开机的情况下自启与远程管理KVM虚拟机
     摘自:https://blog.51cto.com/mfc001/6410324libvirt架构停止libvirt服务,需要同时停止以下几个服务[root@ubunt~]#systemctlstoplibvirtdlibvirtd-ro.socketlibvirtd.socketlibvirtd-admin.socket这些服务之间是有关系的,如果服务有问题,可以看下其他服务......
  • 7、虚拟机性能监控、虚拟机快照以及宿主机上的虚拟机迁移到另一个宿主机
    摘自:https://blog.51cto.com/mfc001/6410333 虚拟机性能监控图形管理页面--Edit--preferences--polling--全部开启--close 关掉管理页面并重新virt-manager启动图形管理页面--View中选项全部开启   虚拟机快照点击虚拟机打开虚拟机页面--点击......
  • 1、KVM安装部署及virt-manager图形化工具创建安装虚拟机、命令行工具virt-install创建
    摘自:https://blog.51cto.com/mfc001/6408159KVM安装部署KVM做单机管理虚拟机,Openstack集群管理虚拟机docker单机管理容器,k8s集群管理容器宿主机环境准备在vmware安装linux系统,并在设置中开启虚拟化CPU开启虚拟化一:开启虚拟化引擎两项内容二:提高内存和处理......
  • 2、利用安装好的虚拟机创建新的虚拟机(克隆现有虚拟机)
    摘自:https://blog.51cto.com/mfc001/6408220利用安装好的虚拟机创建新的虚拟机(克隆现有虚拟机)利用virt-install实现利用virt-manager实现利用virt-clone克隆实现   方法一:利用virt-install实现把磁盘文件拷到需要创建虚拟机的位置[root@rocky8~]#......
  • 华三CAS部署虚拟机
    Windows7为例,CAS已部署完成。首先,我们要把虚拟机的安装镜像上传到CVK节点的存储中。选中其中一个CVK节点,进入“存储”页面,选中存储池“isopool”,点击下面的“上传文件”。 选择下载好的Windows7安装镜像,记得要点击“开始上传”,CAS不会和VMWare一样直接上传。受益于全千兆网......
  • centos扩容——在原有的虚拟机中,修改了硬盘空间,扩容
    1.查看磁盘情况fdisk-l 可以查看已经分区和挂载的磁盘查看更改物理磁盘之后的空间区情况lsblk 分析: 从以上情况可以看出,物理磁盘已经扩容,然而对应的root/home目录未实现自动分配。需要对新增的空间进行分区2.分区fdisk/dev/vda //为挂载的硬盘以上命令进入分......
  • 解决powershell conda init初始化乱码无法使用
    在powershell中使用condainit如果出现了下图最后一行的输出,且之后每次使用conda都提示你执行初始化,那就是跟题主一样的情况。原因有两个:1、你的“文档”库文件夹处在中文目录下2、windows默认编码不是UTF-8,但是conda初始化的时候是按UTF-8编码去生成powershell的配置文件这......
  • Django学习(二) 之 模板的使用
    写在前面昨晚应该是睡的最好一天吧,最近一个月睡眠好差,睡不着不说,而且半夜总醒,搞的我第二天就会超没精神。昨天下午去姐姐家,我刚进屋,小外甥直接就问我说:老舅,你都很长时间没来啦,**(前女友)哪去了,我们都好久没出溜溜了!我顿了下说,她不喜欢我们了,等以后天暖和,我们再去溜溜。......
  • 关于kmp模板
    那个求p串的next数组这个版本是下标从1开始的字符串,如果从0开始的话,可以在前面加空字符,然后p.size或者s.size的地方-1即可。nex[1]=0    for(inti=2,j=0;i<=p.size();i++){if(j&&p[i]!=p[j+1])j=nex[j];if(p[i]==p[j+1])j++;nex[i]=j;} kmp函数......