mirror of https://github.com/apache/cloudstack.git
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:
parent
2af6789020
commit
5f3e0c5783
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue