formatuu 发表于 2015-4-18 09:24:51

禁止CloudStack删除Xenserver原有虚拟机

CloudStack在文档中指明需要加入一台干净的Xenserver作为hyperviser。

但是实际使用中,总会存在不同的需求,很多场景是试用CloudStack接管当前已有的hyperviser而非完整重新部署,那么之前在hyperviser中启动的vm,则会被判断为非CloudStack管理而被关闭或删除,如此则会产生对现有环境的不良影响。现实部署环境中,总有些情况,是要求保留现有环境中已有的vm。

以Xenserver为例,非CS管理的vm,会被关闭,CS对于xenserver中vm生命周期的管理比较特殊,在关闭vm之后,还会删除vm实例,只保留磁盘文件,即vdi,这样的结果,对于原有vm设置并不熟悉的管理员来说,相当于噩梦一般的存在了。




那么我们从代码中来看一下为什么虚拟机会被删除。以CS 4.0.2为例:


在XenCenter中新建一台vm,等待一段时间就会发现,该vm关机并且消失了。


此时查看log,会发现如下信息:


2013-08-05 20:19:47,038 WARN (DirectAgent-84:null) Found an alien VM Windows 7 (32-bit) (1)


2013-08-05 20:19:47,038 DEBUG[cloud.vm.VirtualMachineManagerImp
l] (DirectAgent-84:null) Cleaningup a VM that is no longer found : Windows 7 (32-bit) (1)


2013-08-05 20:19:47,045 DEBUG (DirectAgent-84:null) Seq 1-229638607: Sending
{Cmd , MgmtId: 345049672023, via: 1, Ver: v1, Flags: 100111,[{"StopCommand":{"isProxy":false,"vmName":"Windows 7 (32-bit)(1)","wait":0}}] }


2013-08-05 20:19:47,045 DEBUG (DirectAgent-84:null) Seq 1-229638607: Executing:
{ Cmd , MgmtId: 345049672023, via: 1, Ver: v1,Flags: 100111, [{"StopCommand":{"isProxy":false,"vmName":"Windows 7(32-bit) (1)","wait":0}}] }


“Windows 7 (32-bit) (1)” 是我所建vm的名字。




第一行log出现在VirtualMachineManagerImp
l.java中的convertToInfos(Map>)方法中,
    protected Map convertToInfos(final Map newStates) {
final HashMap map = new HashMap();
if (newStates == null) {
return map;
}
Collection
页: [1]
查看完整版本: 禁止CloudStack删除Xenserver原有虚拟机