CS-15155 : after system VMs boot up, destroy CD virtual device for System VM

when reconnect XenServer host, try to destroy CD virtual device for System VM, this is for upgrade

Reviewed-By : kelven
This commit is contained in:
anthony 2012-05-31 13:37:13 -07:00
parent 29b82f2778
commit 89332d2816
1 changed files with 29 additions and 1 deletions

View File

@ -1118,6 +1118,26 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return cdromVBD;
}
protected void destroyPatchVbd(Connection conn, String vmName) throws XmlRpcException, XenAPIException {
try {
if( !vmName.startsWith("r-") && !vmName.startsWith("s-") && !vmName.startsWith("v-") ) {
return;
}
Set<VM> vms = VM.getByNameLabel(conn, vmName);
for ( VM vm : vms ) {
Set<VBD> vbds = vm.getVBDs(conn);
for( VBD vbd : vbds ) {
if (vbd.getType(conn) == Types.VbdType.CD ) {
vbd.destroy(conn);
break;
}
}
}
} catch (Exception e) {
s_logger.debug("Cannot destory CD-ROM device for VM " + vmName + " due to " + e.toString(), e);
}
}
protected CheckSshAnswer execute(CheckSshCommand cmd) {
Connection conn = getConnection();
String vmName = cmd.getName();
@ -1133,6 +1153,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
if (result != null) {
return new CheckSshAnswer(cmd, "Can not ping System vm " + vmName + "due to:" + result);
}
destroyPatchVbd(conn, vmName);
} catch (Exception e) {
return new CheckSshAnswer(cmd, e);
}
@ -2697,7 +2718,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
callHostPlugin(conn, "vmopsSnapshot", "unmountSnapshotsDir", "dcId", dcId.toString());
setupLinkLocalNetwork(conn);
// try to destroy CD-ROM device for all system VMs
try {
Set<VM> vms = VM.getAll(conn);
for ( VM vm : vms ) {
destroyPatchVbd(conn, vm.getNameLabel(conn));
}
} catch (Exception e) {
}
try {
boolean result = cleanupHaltedVms(conn);
if (!result) {