如何动态地给vSphere虚拟机模板注入信息

在做vSphere自动化安装过程中,遇到这样一个需求:将vCenter Server做成模板,在给用户自动化装好vSphere后,下载vCenter Server模板并启动虚拟机,然后将vCenter Server的IP返回给用户,用户即可使用vSphere集群。可是vCenter Server的IP不是固定的,而是在自动化安装vSphere集群请求到来时由网络模块分配并发送过来的,因此在做vCenter Server模板时是无法写入某个IP的。那如果在vCenter Server虚拟机启动前,将网络模块发送过来的IP注入到模板的配置文件中,然后vCenter Server虚拟机启动后使用内部命令获取到这个IP给自己配上,这样用户就可以使用该IP连接vCenter Server了。

这个哥们写了很多VMware相关的技术文章,但还是没有提到这个问题的解决办法,韦哥经过自己琢磨,找到一种方法:

在vSphere中,每个虚拟机都带有一个后缀名为vmx的文件,这个文件干嘛呢,看这里。在虚拟机启动前,往vmx文件注入一些信息,shell脚本如下:

echo guestinfo.mgr_ip = “$cluster_ip” >> /vmfs/volumes/$datastore/vcenter_server/vcenter_server.vmx

echo guestinfo.mgr_netmask = “$cluster_netmask” >>/vmfs/volumes/$datastore/vcenter_server/vcenter_server.vmx

echo guestinfo.mgr_gateway = “$cluster_gateway” >>/vmfs/volumes/$datastore/vcenter_server/vcenter_server.vmx

其中cluster_ip,cluster_netmask,cluster_gateway的值就是之后vCenter Server启动后给自己配置的IP信息。然后在宿主机内启动vCenter Server虚拟机:

#Power VCSA on
vim-cmd vmsvc/getallvms|grep vcenter_server|awk {‘print $1’}|xargs vim-cmd vmsvc/power.on

在vCenter Server内部,第一次开机启动时,执行下面的命令提取出之前注入配置文件的IP信息,给自己配上:

cluster_ip=`vmtoolsd –cmd “info-get guestinfo.mgr_ip”`

cluster_netmask=`vmtoolsd –cmd “info-get guestinfo.mgr_netmask”`

cluster_gateway=`vmtoolsd –cmd “info-get guestinfo.mgr_gateway”`

sed -i “s/IPADDR=/IPADDR=$mgr_ip/g” /etc/sysconfig/network/ifcfg-eth0

sed -i “s/NETMASK=/NETMASK=$mgr_netmask/g” /etc/sysconfig/network/ifcfg-eth0

echo “$mgr_gateway”  >> /etc/sysconfig/network/routes

完,如果这个方法对你有用,请点个赞,好让我知道真还有人用到。

欢迎关注微信视频号: