虚拟机改名脚本:renamevm.sh
#!/usr/bin/bash
# change the name of the designate vm to a new name
# Usage: vmrename oldname newname
# 本程序实现的功能是将虚拟机更改名称,其镜像文件名称也被更改,其路径在原路径。
if [ $UID -ne 0 ]
then
echo "You are not root, can not execute this script"
exit 1
fi
if [ $# -ne 2 ]
then
echo "Usage Error! Usage: renamevm.sh oldvm newvm"
exit 1
fi
OLDVM=$1
NEWVM=$2
FLAG=0
ALLVM=$(virsh list --all | sed -n '3,$p' | awk '{print $2}')
for vm in ${ALLVM}
do
if [[ "${OLDVM}" == "$vm" ]]
then
FLAG=1
break
fi
done
if [ ${FLAG} -eq 0 ]
then
echo "source vm ${OLDVM} does not exist!"
exit 1
fi
FLAG=1
for vm in ${ALLVM}
do
if [[ "${NEWVM}" == "$vm" ]]
then
FLAG=0
break
fi
done
if [ ${FLAG} -eq 0 ]
then
echo "dest vm ${NEWVM} already exits"
exit 1
fi
STAT=$(virsh list --all | grep ${OLDVM} | awk '{print $3}')
if [[ ${STAT} == "running" ]]
then
echo "${OLDVM} is running now, please shutdown it first"
exit 1
fi
virsh dumpxml ${OLDVM} > ${NEWVM}.xml
if [ ! -e ${NEWVM}.xml ]
then
echo "can not find ${NEWVM}.xml "
exit 1
fi
sed -ri "s@(<name>).*(</name>)@\1${NEWVM}\2@" ${NEWVM}.xml
FILEPATH=$(cat ${NEWVM}.xml | sed -rn '/<source file/p' | sed -rn "s@.*<source file='(.*)'/>@\1@p")
EXT=$(cat ${NEWVM}.xml | sed -rn '/<driver name/p' | sed -rn "s@.*<driver name.*'(.*)'/>@\1@p")
DISKDIR=$(dirname ${FILEPATH})
NEWFILEPATH=${DISKDIR}/${NEWVM}.${EXT}
mv ${FILEPATH} ${NEWFILEPATH}
sed -ri "s@(.*<source file=').*('/>)@\1${NEWFILEPATH}\2@" ${NEWVM}.xml
#
#echo "OLDVM:$OLDVM"
#echo "OLDDISK:${FILEPATH}"
#echo "NEWDISK:${NEWFILEPATH}"
virsh undefine ${OLDVM} &>/dev/null
virsh define ${NEWVM}.xml &>/dev/null
if [ $? -eq 0 ]
then
echo "rename old vm ${OLDVM} to ${NEWVM} Successfully"
else
echo "rename old vm ${OLDVM} to ${NEWVM} failed"
fi
rm -rf ${NEWVM}.xml测试:

版权声明:本文为yuyuyuliang00原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。