查看物理机上运行的虚拟机和虚机ip

文章目录

  • 需求
  • 代码
  • 执行结果

需求

现在有几百台物理机,需要统计每台物理机上面有多少台虚拟机,每台虚拟机的状态,以及虚拟机的ip。

代码

话不多说,直接放代码,注意:执行代码之前需要先执行环境变量。 (环境变量是执行 nova show需要的环境变量)

[root@controller01 ccx]# cat uuid.sh 
if [ $# -eq 0 ] ;then
        echo "Usage: /root/iplist.txt"
        elif [ -f $1 ] ; then
                for ip in `cat $1` ; do
                		#获取虚拟机名称和运行状态
                        name1=`ssh root@$ip virsh list --all | grep ins | awk '{print $2,$3,$4}'`
                        #获取虚拟机名称
                        name2=`ssh root@$ip virsh list --all | grep ins | awk '{print $2}'`
                        # 获取主机名
                        ipname=`ssh root@$ip hostname`
                        # 主机名写到下面目录中
                        echo -e "$ipname\n$name1" >> /root/ccx/ipname.log
                        # 这儿不能用>>,否则每次循环都会把之前的值重新全部写一遍
                        echo "$name2" > /root/ccx/name2.log
                        uuidname=`cat /root/ccx/name2.log`
                        #把之前获取到的虚拟机名称定义为数组
                        array=($uuidname)
                        #echo ${array[*]}
                                for leng in ${array[*]} ; do
                                #echo $leng
                                # 获取虚拟机名称的uuid
                                uuid=`ssh root@$ip virsh domuuid $leng`
                                echo "$leng $uuid" >> /root/ccx/uuid.log | awk '$1 ~ /ins/{print $1,$2,$3,$4}'
                                done
                                echo "____________________" >> /root/ccx/uuid.log
                done
                cat /root/ccx/ipname.log
                cat /root/ccx/name2.log
                cat /root/ccx/uuid.log
                        #cat /root/ccx/uuid.log
                        # 获取uuid
                        addip=`cat /root/ccx/uuid.log | awk '{print $2}'`
                for uuip in  $addip ; do
                		#通过uuid获取虚拟机ip
                        ywip=`nova show $uuip | grep network | awk '{print $5}'`
                        # 显示uuid和该uuid的ip
                        echo "$uuip $ywip"
                done
                # 下面是清空日志,而且必须清除,否则执行第二次就会报错(因为日志中有内容)。
                > /root/ccx/ipname.log
                > /root/ccx/name2.log
                > /root/ccx/uuid.log

        else
                echo "Input file not found"
fi

[root@controller01 ccx]# #需要新建一个文件放ip,如我用的是iplist.txt
[root@controller01 ccx]# cat iplist.txt 
0.0.0.0
0.0.0.1
0.0.0.2
0.0.0.3
0.0.0.4
...
[root@controller01 ccx]# #执行
[root@controller01 ccx]# sh uuid.sh iplist.txt
[root@controller01 ccx]# # 执行完毕以后会多出几个log文件
[root@controller01 ccx]# ls
  iplist.txt     ipname.log  name2.log  uuid.log  uuid.sh

执行结果

执行结果分3种,我每种都会放上前一个的一个值,方便效验。
第一种:显示主机名和该主机名下的虚机名称以及运行状态;
查看物理机上运行的虚拟机和虚机ip_第1张图片
第二种显示 虚机名称和其uuid;
查看物理机上运行的虚拟机和虚机ip_第2张图片
第三种:显示uuid和其对应的IP。
查看物理机上运行的虚拟机和虚机ip_第3张图片
最后复制粘贴放到excel中,完美!!!!!(注:下图放到excel中用到了excel自带以空格分列的功能)
查看物理机上运行的虚拟机和虚机ip_第4张图片

你可能感兴趣的:(shell,linux)