Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import org.apache.cloudstack.hypervisor.xenserver.ExtraConfigurationUtility;
import org.apache.cloudstack.storage.command.browser.ListDataStoreObjectsAnswer;
import org.apache.cloudstack.storage.command.browser.ListDataStoreObjectsCommand;
import org.apache.cloudstack.storage.configdrive.ConfigDrive;
import org.apache.cloudstack.storage.to.TemplateObjectTO;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
import org.apache.cloudstack.utils.security.ParserUtils;
Expand Down Expand Up @@ -222,6 +223,8 @@ public String toString() {

private final static String VM_NAME_ISO_SUFFIX = "-ISO";

private final static String VM_NAME_CONFIGDRIVE_ISO_SUFFIX = "-CONFIGDRIVE-ISO";

private final static String VM_FILE_ISO_SUFFIX = ".iso";
public final static int DEFAULTDOMRSSHPORT = 3922;

Expand Down Expand Up @@ -1020,12 +1023,13 @@ public ExecutionResult copyPatchFilesToVR(final String routerIp, final String pa
protected SR createIsoSRbyURI(final Connection conn, final URI uri, final String vmName, final boolean shared) {
try {
final Map<String, String> deviceConfig = new HashMap<String, String>();
final boolean isConfigDrive = uri.toString().endsWith(ConfigDrive.CONFIGDRIVEDIR);
String path = uri.getPath();
path = path.replace("//", "/");
deviceConfig.put("location", uri.getHost() + ":" + path);
final Host host = Host.getByUuid(conn, _host.getUuid());
final SR sr = SR.create(conn, host, deviceConfig, new Long(0), uri.getHost() + path, "iso", "iso", "iso", shared, new HashMap<String, String>());
sr.setNameLabel(conn, vmName + "-ISO");
sr.setNameLabel(conn, vmName + (isConfigDrive ? VM_NAME_CONFIGDRIVE_ISO_SUFFIX: VM_NAME_ISO_SUFFIX));
sr.setNameDescription(conn, deviceConfig.get("location"));

sr.scan(conn);
Expand Down Expand Up @@ -2648,9 +2652,10 @@ private String probeScisiId(Connection conn, Host host, Map<String, String> devi
return scsiid;
}

public SR getISOSRbyVmName(final Connection conn, final String vmName) {
public SR getISOSRbyVmName(final Connection conn, final String vmName, boolean isConfigDrive) {
try {
final Set<SR> srs = SR.getByNameLabel(conn, vmName + "-ISO");
final Set<SR> srs = SR.getByNameLabel(conn, vmName +
(isConfigDrive ? VM_NAME_CONFIGDRIVE_ISO_SUFFIX : VM_NAME_ISO_SUFFIX));
if (srs.size() == 0) {
return null;
} else if (srs.size() == 1) {
Expand Down Expand Up @@ -2697,9 +2702,20 @@ public VDI getIsoVDIByURL(final Connection conn, final String vmName, final Stri
} catch (final URISyntaxException e) {
throw new CloudRuntimeException("isoURL is wrong: " + isoURL);
}
isoSR = getISOSRbyVmName(conn, vmName);
isoSR = getISOSRbyVmName(conn, vmName, false);
if (isoSR == null) {
isoSR = createIsoSRbyURI(conn, uri, vmName, false);
} else {
try {
String description = isoSR.getNameDescription(conn);
if (description.endsWith(ConfigDrive.CONFIGDRIVEDIR)) {
throw new CloudRuntimeException(String.format("VM %s already has %s ISO attached. Please " +
"stop-start VM to allow attaching-detaching both ISOs", vmName, ConfigDrive.CONFIGDRIVEDIR));
}
} catch (XenAPIException | XmlRpcException e) {
throw new CloudRuntimeException(String.format("Unable to retrieve name description for the already " +
"attached ISO on VM %s", vmName));
}
}

final String isoName = isoURL.substring(index + 1);
Expand Down Expand Up @@ -5667,7 +5683,7 @@ public boolean attachConfigDriveToMigratedVm(Connection conn, String vmName, Str
s_logger.debug("Attaching config drive iso device for the VM " + vmName + " In host " + ipAddr);
Set<VM> vms = VM.getByNameLabel(conn, vmName);

SR sr = getSRByNameLabel(conn, vmName + VM_NAME_ISO_SUFFIX);
SR sr = getSRByNameLabel(conn, vmName + VM_NAME_CONFIGDRIVE_ISO_SUFFIX);
//Here you will find only two vdis with the <vmname>.iso.
//one is from source host and second from dest host
Set<VDI> vdis = VDI.getByNameLabel(conn, vmName + VM_FILE_ISO_SUFFIX);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,10 @@ public Answer execute(final StopCommand command, final CitrixResourceBase citrix
networks.add(vif.getNetwork(conn));
}
vm.destroy(conn);
final SR sr = citrixResourceBase.getISOSRbyVmName(conn, command.getVmName());
final SR sr = citrixResourceBase.getISOSRbyVmName(conn, command.getVmName(), false);
citrixResourceBase.removeSR(conn, sr);
final SR configDriveSR = citrixResourceBase.getISOSRbyVmName(conn, command.getVmName(), true);
citrixResourceBase.removeSR(conn, configDriveSR);
// Disable any VLAN networks that aren't used
// anymore
for (final Network network : networks) {
Expand Down