是否可以处理仅在configurationpipe理方面有所不同的VM guest虚拟机的自动升级? 我在询问有助于实现的一般或特定技术。 简而言之,我有一些CentOS / Debian安装可以被认为是一个干净的安装+木偶configuration。 我希望以自动方式执行yum update或等效( apt-get upgrade )或安装软件包X.我希望通过使用我的VM模板,在那里升级操作系统,然后重新部署每个VM基于该模板一个接一个(在我眼球模板,以确保没有什么破)。
我不在乎它是ESXi还是XenServer,还是openvz或其他什么东西。 我不介意必须安装第三方工具。 我知道XenServer滚动池升级,但这仅适用于主机afaik。
总之,你想要build立一个模板。 按照您的维护计划,将其转换为虚拟机,启动新的虚拟机,运行sudo yum -y update ; sudo shutdown -h now sudo yum -y update ; sudo shutdown -h now 。
一旦closures,转换回活动虚拟机的模板。 由于您的configurationpipe理已经就绪,您只需构build一个与旧的清单匹配的新VM,然后将configuration滚动到新configuration,交换DNSlogging并杀死旧configuration。
我还没有看到一个固定工具来执行这个工作,但是VMWare PowerCLI(VMWare VCenter的PowerShell插件)可以使用Set-VM -ToTemplate和Set-Template -ToVM命令[1]在模板和虚拟机之间进行转换。
一旦启动并运行虚拟机(模板的实时表示),就可以使用Invoke-VMScript命令[2]向客户Invoke-VMScript命令,例如发出yum命令[3]。
我正在玩这个想法,并有一个Q&D周末黑客。 我没有testing过这个脚本,而且几乎肯定是错误的,但是这里是让你开始的基本想法。 请注意,它有一些不好的想法,比如在脚本中包含密码,或者为虚拟机和模板假设一个平面名称空间。
#################################
##将VMWare模板转换为正在运行的模板
##系统,应用维护,然后转换
##回到模板
##
##注意,这天真地不做任何错误 -
##检查并没有指定很多信息
##
##请适应您的环境
##
#################################
Param {
[string] $ templatename;
}
$ RHELPasswd ='P @ $$ w0rd!' ;
如果(!$ templatename){
写入错误“请在命令行上传递模板的名称”;
退出(-1);
}
if(Get-Template -Name $ templatename){
$ vm = Set-Template -Template $ templatename -ToVM;
$ guestscript ='sudo yum -y update; sudo shutdown -h now';
Invoke-VMScript -VM $ vm -ScriptText $ guestscript -GuestUser'root'-GuestPassword $ RHELPasswd;
Get-VM $ vm | Set-VM -ToTemplate -name $ templatename;
}
1: http : //www.mikelaverick.com/2014/06/back-to-basics-creating-and-deploying-templates-with-powercli-part-7/ [4]和[5]
2: https : //www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Invoke-VMScript.html
3: https : //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/ch-yum.html#sec-Checking_For_and_Updating_Packages
4: https : //www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Set-VM.html
5: https : //www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Set-Template.html