mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	Sync updates: Merge branch 'master' into api_refactoring
Conflicts: server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
This commit is contained in:
		
						commit
						a948a89378
					
				@ -3705,10 +3705,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
 | 
			
		||||
            ManagedObjectReference morDatastore = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, pool.getUuid());
 | 
			
		||||
            if (morDatastore == null)
 | 
			
		||||
                throw new Exception("Unable to find datastore in vSphere");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            DatastoreMO dsMo = new DatastoreMO(context, morDatastore);
 | 
			
		||||
 | 
			
		||||
            if (cmd.getDiskCharacteristics().getType() == Volume.Type.ROOT) {
 | 
			
		||||
            if (dskch.getType() == Volume.Type.ROOT) {
 | 
			
		||||
                // attach volume id to make the name unique
 | 
			
		||||
                String vmdkName = dskch.getName() + "-" + dskch.getVolumeId();
 | 
			
		||||
                if (cmd.getTemplateUrl() == null) {
 | 
			
		||||
                    // create a root volume for blank VM
 | 
			
		||||
                    String dummyVmName = getWorkerName(context, cmd, 0);
 | 
			
		||||
@ -3720,16 +3722,15 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
 | 
			
		||||
                            throw new Exception("Unable to create a dummy VM for volume creation");
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        String volumeDatastorePath = String.format("[%s] %s.vmdk", dsMo.getName(), cmd.getDiskCharacteristics().getName());
 | 
			
		||||
                        String volumeDatastorePath = String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName);
 | 
			
		||||
                        synchronized (this) {
 | 
			
		||||
                            s_logger.info("Delete file if exists in datastore to clear the way for creating the volume. file: " + volumeDatastorePath);
 | 
			
		||||
                            VmwareHelper.deleteVolumeVmdkFiles(dsMo, cmd.getDiskCharacteristics().getName(), dcMo);
 | 
			
		||||
                            vmMo.createDisk(volumeDatastorePath, (int) (cmd.getDiskCharacteristics().getSize() / (1024L * 1024L)), morDatastore, -1);
 | 
			
		||||
                            VmwareHelper.deleteVolumeVmdkFiles(dsMo, vmdkName, dcMo);
 | 
			
		||||
                            vmMo.createDisk(volumeDatastorePath, (int) (dskch.getSize() / (1024L * 1024L)), morDatastore, -1);
 | 
			
		||||
                            vmMo.detachDisk(volumeDatastorePath, false);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), cmd.getDiskCharacteristics().getName(), pool.getPath(), cmd
 | 
			
		||||
                                .getDiskCharacteristics().getName(), cmd.getDiskCharacteristics().getSize(), null);
 | 
			
		||||
                        VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), vmdkName, dskch.getSize(), null);
 | 
			
		||||
                        return new CreateAnswer(cmd, vol);
 | 
			
		||||
                    } finally {
 | 
			
		||||
                        vmMo.detachAllDisks();
 | 
			
		||||
@ -3753,41 +3754,40 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
 | 
			
		||||
                        throw new Exception(msg);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    String name = cmd.getDiskCharacteristics().getName();
 | 
			
		||||
                    if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), name))
 | 
			
		||||
                    	dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), name), dcMo.getMor(), false);
 | 
			
		||||
                    if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName))
 | 
			
		||||
                        dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(), false);
 | 
			
		||||
 | 
			
		||||
                    s_logger.info("create linked clone from template");
 | 
			
		||||
                    if (!vmTemplate.createLinkedClone(name, morBaseSnapshot, dcMo.getVmFolder(), morPool, morDatastore)) {
 | 
			
		||||
                    if (!vmTemplate.createLinkedClone(vmdkName, morBaseSnapshot, dcMo.getVmFolder(), morPool, morDatastore)) {
 | 
			
		||||
                        String msg = "Unable to clone from the template";
 | 
			
		||||
                        s_logger.error(msg);
 | 
			
		||||
                        throw new Exception(msg);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VirtualMachineMO vmMo = new ClusterMO(context, morCluster).findVmOnHyperHost(name);
 | 
			
		||||
                    VirtualMachineMO vmMo = new ClusterMO(context, morCluster).findVmOnHyperHost(vmdkName);
 | 
			
		||||
                    assert (vmMo != null);
 | 
			
		||||
 | 
			
		||||
                    // we can't rely on un-offical API (VirtualMachineMO.moveAllVmDiskFiles() any more, use hard-coded disk names that we know
 | 
			
		||||
                    // to move files
 | 
			
		||||
                    s_logger.info("Move volume out of volume-wrapper VM ");
 | 
			
		||||
                    dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), name, name), 
 | 
			
		||||
                    	dcMo.getMor(), dsMo.getMor(), 
 | 
			
		||||
                    	String.format("[%s] %s.vmdk", dsMo.getName(), name), dcMo.getMor(), true);
 | 
			
		||||
                    dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), vmdkName, vmdkName),
 | 
			
		||||
                        dcMo.getMor(), dsMo.getMor(),
 | 
			
		||||
                        String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true);
 | 
			
		||||
                    
 | 
			
		||||
                    dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), name, name), 
 | 
			
		||||
                        	dcMo.getMor(), dsMo.getMor(), 
 | 
			
		||||
                        	String.format("[%s] %s-delta.vmdk", dsMo.getName(), name), dcMo.getMor(), true);
 | 
			
		||||
                    dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), vmdkName, vmdkName),
 | 
			
		||||
                            dcMo.getMor(), dsMo.getMor(),
 | 
			
		||||
                            String.format("[%s] %s-delta.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true);
 | 
			
		||||
 | 
			
		||||
                    s_logger.info("detach disks from volume-wrapper VM " + name);
 | 
			
		||||
                    s_logger.info("detach disks from volume-wrapper VM " + vmdkName);
 | 
			
		||||
                    vmMo.detachAllDisks();
 | 
			
		||||
 | 
			
		||||
                    s_logger.info("destroy volume-wrapper VM " + name);
 | 
			
		||||
                    s_logger.info("destroy volume-wrapper VM " + vmdkName);
 | 
			
		||||
                    vmMo.destroy();
 | 
			
		||||
 | 
			
		||||
                    String srcFile = String.format("[%s] %s/", dsMo.getName(), name);
 | 
			
		||||
                    String srcFile = String.format("[%s] %s/", dsMo.getName(), vmdkName);
 | 
			
		||||
                    dsMo.deleteFile(srcFile, dcMo.getMor(), true);
 | 
			
		||||
 | 
			
		||||
                    VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), name, pool.getPath(), name, cmd.getDiskCharacteristics().getSize(), null);
 | 
			
		||||
                    VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), vmdkName, dskch.getSize(), null);
 | 
			
		||||
                    return new CreateAnswer(cmd, vol);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
@ -3806,12 +3806,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
 | 
			
		||||
                        // s_logger.info("Delete file if exists in datastore to clear the way for creating the volume. file: " + volumeDatastorePath);
 | 
			
		||||
                        VmwareHelper.deleteVolumeVmdkFiles(dsMo, volumeUuid.toString(), dcMo);
 | 
			
		||||
 | 
			
		||||
                        vmMo.createDisk(volumeDatastorePath, (int) (cmd.getDiskCharacteristics().getSize() / (1024L * 1024L)), morDatastore, vmMo.getScsiDeviceControllerKey());
 | 
			
		||||
                        vmMo.createDisk(volumeDatastorePath, (int) (dskch.getSize() / (1024L * 1024L)), morDatastore, vmMo.getScsiDeviceControllerKey());
 | 
			
		||||
                        vmMo.detachDisk(volumeDatastorePath, false);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), cmd.getDiskCharacteristics().getName(), pool.getPath(), volumeUuid, cmd
 | 
			
		||||
                            .getDiskCharacteristics().getSize(), null);
 | 
			
		||||
                    VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), volumeUuid, dskch.getSize(), null);
 | 
			
		||||
                    return new CreateAnswer(cmd, vol);
 | 
			
		||||
                } finally {
 | 
			
		||||
                    s_logger.info("Destroy dummy VM after volume creation");
 | 
			
		||||
 | 
			
		||||
@ -25,13 +25,12 @@ import com.cloud.exception.InvalidParameterValueException;
 | 
			
		||||
import com.cloud.host.Host;
 | 
			
		||||
import com.cloud.network.NetworkUsageManager;
 | 
			
		||||
import com.cloud.server.ManagementService;
 | 
			
		||||
import org.apache.cloudstack.api.response.ExternalFirewallResponse;
 | 
			
		||||
import org.apache.cloudstack.api.response.TrafficMonitorResponse;
 | 
			
		||||
import com.cloud.user.Account;
 | 
			
		||||
import com.cloud.utils.component.ComponentLocator;
 | 
			
		||||
import com.cloud.utils.exception.CloudRuntimeException;
 | 
			
		||||
 | 
			
		||||
@APICommand(name = "addTrafficMonitor", description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = ExternalFirewallResponse.class)
 | 
			
		||||
@APICommand(name = "addTrafficMonitor", description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = TrafficMonitorResponse.class)
 | 
			
		||||
public class AddTrafficMonitorCmd extends BaseCmd {
 | 
			
		||||
	public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName());	
 | 
			
		||||
	private static final String s_name = "addtrafficmonitorresponse";	
 | 
			
		||||
 | 
			
		||||
@ -31,11 +31,10 @@ import org.apache.cloudstack.api.response.ListResponse;
 | 
			
		||||
import com.cloud.host.Host;
 | 
			
		||||
import com.cloud.network.NetworkUsageManager;
 | 
			
		||||
import com.cloud.server.ManagementService;
 | 
			
		||||
import org.apache.cloudstack.api.response.ExternalFirewallResponse;
 | 
			
		||||
import org.apache.cloudstack.api.response.TrafficMonitorResponse;
 | 
			
		||||
import com.cloud.utils.component.ComponentLocator;
 | 
			
		||||
 | 
			
		||||
@APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class)
 | 
			
		||||
@APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = TrafficMonitorResponse.class)
 | 
			
		||||
public class ListTrafficMonitorsCmd extends BaseListCmd {
 | 
			
		||||
	public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName());
 | 
			
		||||
    private static final String s_name = "listtrafficmonitorsresponse";
 | 
			
		||||
 | 
			
		||||
@ -3396,12 +3396,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
 | 
			
		||||
    @DB
 | 
			
		||||
    protected VolumeVO switchVolume(VolumeVO existingVolume, VirtualMachineProfile<? extends VirtualMachine> vm) throws StorageUnavailableException {
 | 
			
		||||
        Transaction txn = Transaction.currentTxn();
 | 
			
		||||
        txn.start();
 | 
			
		||||
        try {
 | 
			
		||||
            stateTransitTo(existingVolume, Volume.Event.DestroyRequested);
 | 
			
		||||
        } catch (NoTransitionException e) {
 | 
			
		||||
            s_logger.debug("Unable to destroy existing volume: " + e.toString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Long templateIdToUse = null;
 | 
			
		||||
        Long volTemplateId = existingVolume.getTemplateId();
 | 
			
		||||
@ -3412,7 +3406,19 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
 | 
			
		||||
            }
 | 
			
		||||
            templateIdToUse = vmTemplateId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        txn.start();
 | 
			
		||||
        VolumeVO newVolume = allocateDuplicateVolume(existingVolume, templateIdToUse);
 | 
			
		||||
        // In case of Vmware if vm reference is not removed then during root disk cleanup
 | 
			
		||||
        // the vm also gets deleted, so remove the reference
 | 
			
		||||
        if (vm.getHypervisorType() == HypervisorType.VMware) {
 | 
			
		||||
            _volsDao.detachVolume(existingVolume.getId());
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            stateTransitTo(existingVolume, Volume.Event.DestroyRequested);
 | 
			
		||||
        } catch (NoTransitionException e) {
 | 
			
		||||
            s_logger.debug("Unable to destroy existing volume: " + e.toString());
 | 
			
		||||
        }
 | 
			
		||||
        txn.commit();
 | 
			
		||||
        return newVolume;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -229,6 +229,7 @@
 | 
			
		||||
 | 
			
		||||
                $.ajax({
 | 
			
		||||
                  url: createURL('createAccount'),
 | 
			
		||||
                  type: "POST",
 | 
			
		||||
                  data: data,
 | 
			
		||||
                  success: function(json) {
 | 
			
		||||
                    var item = json.createaccountresponse.account;
 | 
			
		||||
@ -920,6 +921,7 @@
 | 
			
		||||
								
 | 
			
		||||
                $.ajax({
 | 
			
		||||
                  url: createURL('createUser'),
 | 
			
		||||
                  type: "POST",
 | 
			
		||||
                  data: data,
 | 
			
		||||
                  success: function(json) {
 | 
			
		||||
                    var item = json.createuserresponse.user;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user