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
This commit is contained in:
anthony 2012-06-15 11:27:53 -07:00
parent 2af6789020
commit 5f3e0c5783
1 changed files with 31 additions and 1 deletions

View File

@ -1104,6 +1104,27 @@ 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.eject(conn);
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();
@ -1119,6 +1140,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);
}
@ -2683,7 +2705,15 @@ 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 on this host
try {
Host host = Host.getByUuid(conn, _host.uuid);
Set<VM> vms = host.getResidentVMs(conn);
for ( VM vm : vms ) {
destroyPatchVbd(conn, vm.getNameLabel(conn));
}
} catch (Exception e) {
}
try {
boolean result = cleanupHaltedVms(conn);
if (!result) {