mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
Merge branch 'master' into ui-vm-affinity
This commit is contained in:
commit
6629eb7468
@ -111,14 +111,14 @@ public class UpdateClusterCmd extends BaseCmd {
|
||||
if(cpuovercommitratio != null){
|
||||
return Float.parseFloat(cpuovercommitratio);
|
||||
}
|
||||
return 1.0f;
|
||||
return null;
|
||||
}
|
||||
|
||||
public Float getMemoryOvercommitRaito (){
|
||||
if (memoryovercommitratio != null){
|
||||
return Float.parseFloat(memoryovercommitratio);
|
||||
}
|
||||
return 1.0f;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -127,9 +127,16 @@ public class UpdateClusterCmd extends BaseCmd {
|
||||
if (cluster == null) {
|
||||
throw new InvalidParameterValueException("Unable to find the cluster by id=" + getId());
|
||||
}
|
||||
if (getMemoryOvercommitRaito() !=null){
|
||||
if ((getMemoryOvercommitRaito().compareTo(1f) < 0)) {
|
||||
throw new InvalidParameterValueException("Memory overcommit ratio should be greater than or equal to one");
|
||||
}
|
||||
}
|
||||
|
||||
if ((getMemoryOvercommitRaito().compareTo(1f) < 0) | (getCpuOvercommitRatio().compareTo(1f) < 0)) {
|
||||
throw new InvalidParameterValueException("Cpu and ram overcommit ratios should be greater than one");
|
||||
if (getCpuOvercommitRatio() !=null){
|
||||
if (getCpuOvercommitRatio().compareTo(1f) < 0) {
|
||||
throw new InvalidParameterValueException("Cpu overcommit ratio should be greater than or equal to one");
|
||||
}
|
||||
}
|
||||
|
||||
Cluster result = _resourceService.updateCluster(cluster, getClusterType(), getHypervisor(), getAllocationState(), getManagedstate(), getMemoryOvercommitRaito(), getCpuOvercommitRatio());
|
||||
|
||||
@ -93,6 +93,9 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
|
||||
}
|
||||
|
||||
public String getStickyMethod() {
|
||||
if (stickyMethod == null) {
|
||||
return "sourceip";
|
||||
}
|
||||
return stickyMethod;
|
||||
}
|
||||
|
||||
|
||||
@ -50,6 +50,10 @@ public class GlobalLoadBalancerResponse extends BaseResponse implements Controll
|
||||
@Param(description = "session persistence method used for the global load balancer")
|
||||
private String stickyMethod;
|
||||
|
||||
@SerializedName(ApiConstants.GSLB_SERVICE_TYPE)
|
||||
@Param(description = "GSLB service type")
|
||||
private String serviceType;
|
||||
|
||||
@SerializedName(ApiConstants.REGION_ID)
|
||||
@Param(description = "Region Id in which global load balancer is created")
|
||||
private Integer regionId;
|
||||
@ -96,6 +100,10 @@ public class GlobalLoadBalancerResponse extends BaseResponse implements Controll
|
||||
this.stickyMethod = stickyMethod;
|
||||
}
|
||||
|
||||
public void setServiceType(String serviceType) {
|
||||
this.serviceType = serviceType;
|
||||
}
|
||||
|
||||
public void setServiceDomainName(String domainName) {
|
||||
this.gslbDomainName = domainName;
|
||||
}
|
||||
|
||||
@ -20,4 +20,5 @@ public interface VmDetailConstants {
|
||||
public static final String KEYBOARD = "keyboard";
|
||||
public static final String NIC_ADAPTER = "nicAdapter";
|
||||
public static final String ROOK_DISK_CONTROLLER = "rootDiskController";
|
||||
public static final String NESTED_VIRTUALIZATION_FLAG = "nestedVirtualizationFlag";
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ import java.util.UUID;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.cloudstack.storage.to.ImageDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.ImageOnPrimaryDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.TemplateTO;
|
||||
import org.mockito.Mockito;
|
||||
@ -126,7 +126,7 @@ public class DirectAgentTest extends CloudStackTestNGBase {
|
||||
|
||||
@Test
|
||||
public void testDownloadTemplate() {
|
||||
ImageOnPrimayDataStoreTO image = Mockito.mock(ImageOnPrimayDataStoreTO.class);
|
||||
ImageOnPrimaryDataStoreTO image = Mockito.mock(ImageOnPrimaryDataStoreTO.class);
|
||||
PrimaryDataStoreTO primaryStore = Mockito.mock(PrimaryDataStoreTO.class);
|
||||
Mockito.when(primaryStore.getUuid()).thenReturn(this.getLocalStorageUuid());
|
||||
Mockito.when(image.getPrimaryDataStore()).thenReturn(primaryStore);
|
||||
|
||||
@ -18,14 +18,14 @@
|
||||
*/
|
||||
package org.apache.cloudstack.storage.command;
|
||||
|
||||
import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.ImageOnPrimaryDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.VolumeTO;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class CreateVolumeFromBaseImageCommand extends Command implements StorageSubSystemCommand {
|
||||
private final VolumeTO volume;
|
||||
private final ImageOnPrimayDataStoreTO image;
|
||||
private final ImageOnPrimaryDataStoreTO image;
|
||||
|
||||
public CreateVolumeFromBaseImageCommand(VolumeTO volume, String image) {
|
||||
this.volume = volume;
|
||||
@ -36,7 +36,7 @@ public class CreateVolumeFromBaseImageCommand extends Command implements Storage
|
||||
return this.volume;
|
||||
}
|
||||
|
||||
public ImageOnPrimayDataStoreTO getImage() {
|
||||
public ImageOnPrimaryDataStoreTO getImage() {
|
||||
return this.image;
|
||||
}
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<StorageProviderResponse> getPrimayrDataStoreProviders() {
|
||||
public List<StorageProviderResponse> getPrimaryDataStoreProviders() {
|
||||
List<StorageProviderResponse> providers = new ArrayList<StorageProviderResponse>();
|
||||
for (DataStoreProvider provider : providerMap.values()) {
|
||||
if (provider instanceof PrimaryDataStoreProvider) {
|
||||
@ -138,7 +138,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
|
||||
throw new InvalidParameterValueException("Invalid parameter, need to specify type: either primary or image");
|
||||
}
|
||||
if (type.equalsIgnoreCase(DataStoreProvider.DataStoreProviderType.PRIMARY.toString())) {
|
||||
return this.getPrimayrDataStoreProviders();
|
||||
return this.getPrimaryDataStoreProviders();
|
||||
} else if (type.equalsIgnoreCase(DataStoreProvider.DataStoreProviderType.IMAGE.toString())) {
|
||||
return this.getImageDataStoreProviders();
|
||||
} else {
|
||||
|
||||
@ -20,11 +20,11 @@ package org.apache.cloudstack.storage.to;
|
||||
|
||||
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
|
||||
|
||||
public class ImageOnPrimayDataStoreTO {
|
||||
public class ImageOnPrimaryDataStoreTO {
|
||||
private final String pathOnPrimaryDataStore;
|
||||
private PrimaryDataStoreTO dataStore;
|
||||
private final TemplateTO template;
|
||||
public ImageOnPrimayDataStoreTO(TemplateOnPrimaryDataStoreInfo template) {
|
||||
public ImageOnPrimaryDataStoreTO(TemplateOnPrimaryDataStoreInfo template) {
|
||||
this.pathOnPrimaryDataStore = template.getPath();
|
||||
//this.dataStore = template.getPrimaryDataStore().getDataStoreTO();
|
||||
this.template = new TemplateTO(template.getTemplate());
|
||||
@ -52,35 +52,37 @@ public class HostAntiAffinityProcessor extends AffinityProcessorBase implements
|
||||
ExcludeList avoid)
|
||||
throws AffinityConflictException {
|
||||
VirtualMachine vm = vmProfile.getVirtualMachine();
|
||||
AffinityGroupVMMapVO vmGroupMapping = _affinityGroupVMMapDao.findByVmIdType(vm.getId(), getType());
|
||||
List<AffinityGroupVMMapVO> vmGroupMappings = _affinityGroupVMMapDao.findByVmIdType(vm.getId(), getType());
|
||||
|
||||
if (vmGroupMapping != null) {
|
||||
AffinityGroupVO group = _affinityGroupDao.findById(vmGroupMapping.getAffinityGroupId());
|
||||
for (AffinityGroupVMMapVO vmGroupMapping : vmGroupMappings) {
|
||||
if (vmGroupMapping != null) {
|
||||
AffinityGroupVO group = _affinityGroupDao.findById(vmGroupMapping.getAffinityGroupId());
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Processing affinity group " + group.getName() + " for VM Id: " + vm.getId());
|
||||
}
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Processing affinity group " + group.getName() + " for VM Id: " + vm.getId());
|
||||
}
|
||||
|
||||
List<Long> groupVMIds = _affinityGroupVMMapDao.listVmIdsByAffinityGroup(group.getId());
|
||||
groupVMIds.remove(vm.getId());
|
||||
List<Long> groupVMIds = _affinityGroupVMMapDao.listVmIdsByAffinityGroup(group.getId());
|
||||
groupVMIds.remove(vm.getId());
|
||||
|
||||
for (Long groupVMId : groupVMIds) {
|
||||
VMInstanceVO groupVM = _vmInstanceDao.findById(groupVMId);
|
||||
if (groupVM != null && !groupVM.isRemoved()) {
|
||||
if (groupVM.getHostId() != null) {
|
||||
avoid.addHost(groupVM.getHostId());
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Added host " + groupVM.getHostId() + " to avoid set, since VM "
|
||||
+ groupVM.getId() + " is present on the host");
|
||||
}
|
||||
} else if (VirtualMachine.State.Stopped.equals(groupVM.getState())
|
||||
&& groupVM.getLastHostId() != null) {
|
||||
avoid.addHost(groupVM.getLastHostId());
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Added host " + groupVM.getLastHostId() + " to avoid set, since VM "
|
||||
+ groupVM.getId() + " is present on the host, in Stopped state");
|
||||
}
|
||||
|
||||
for (Long groupVMId : groupVMIds) {
|
||||
VMInstanceVO groupVM = _vmInstanceDao.findById(groupVMId);
|
||||
if (groupVM != null && !groupVM.isRemoved()) {
|
||||
if (groupVM.getHostId() != null) {
|
||||
avoid.addHost(groupVM.getHostId());
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Added host " + groupVM.getHostId() + " to avoid set, since VM "
|
||||
+ groupVM.getId() + " is present on the host");
|
||||
}
|
||||
} else if (VirtualMachine.State.Stopped.equals(groupVM.getState())
|
||||
&& groupVM.getLastHostId() != null) {
|
||||
avoid.addHost(groupVM.getLastHostId());
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Added host " + groupVM.getLastHostId() + " to avoid set, since VM "
|
||||
+ groupVM.getId() + " is present on the host, in Stopped state");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,7 +217,7 @@ public class AlertsSyslogAppender extends AppenderSkeleton {
|
||||
message.append("unknown" + MESSAGE_DELIMITER_STRING);
|
||||
}
|
||||
|
||||
if (alertType > 0) {
|
||||
if (alertType >= 0) {
|
||||
message.append("alertType").append(_keyValueDelimiter).append(" ").append(alertsMap.get(alertType))
|
||||
.append(MESSAGE_DELIMITER_STRING);
|
||||
if (dataCenterId != 0) {
|
||||
@ -333,4 +333,4 @@ public class AlertsSyslogAppender extends AppenderSkeleton {
|
||||
public void setKeyValueDelimiter(String keyValueDelimiter) {
|
||||
this._keyValueDelimiter = keyValueDelimiter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ import java.util.Map;
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.cloudstack.api.ApiConstants.VMDetails;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -40,6 +41,8 @@ import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
|
||||
import com.cloud.agent.api.to.NicTO;
|
||||
import com.cloud.agent.api.to.VirtualMachineTO;
|
||||
import com.cloud.cluster.ClusterManager;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.configuration.dao.ConfigurationDao;
|
||||
import com.cloud.exception.InsufficientAddressCapacityException;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.host.dao.HostDao;
|
||||
@ -84,6 +87,7 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru {
|
||||
@Inject VmwareManager _vmwareMgr;
|
||||
@Inject SecondaryStorageVmManager _secStorageMgr;
|
||||
@Inject NetworkModel _networkMgr;
|
||||
@Inject ConfigurationDao _configDao;
|
||||
|
||||
protected VMwareGuru() {
|
||||
super();
|
||||
@ -212,8 +216,21 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru {
|
||||
sbMacSequence.deleteCharAt(sbMacSequence.length() - 1);
|
||||
String bootArgs = to.getBootArgs();
|
||||
to.setBootArgs(bootArgs + " nic_macs=" + sbMacSequence.toString());
|
||||
|
||||
}
|
||||
|
||||
// Don't do this if the virtual machine is one of the special types
|
||||
// Should only be done on user machines
|
||||
if(!(vm.getVirtualMachine() instanceof DomainRouterVO || vm.getVirtualMachine() instanceof ConsoleProxyVO
|
||||
|| vm.getVirtualMachine() instanceof SecondaryStorageVmVO)) {
|
||||
String nestedVirt = _configDao.getValue(Config.VmwareEnableNestedVirtualization.key());
|
||||
if (nestedVirt != null) {
|
||||
s_logger.debug("Nested virtualization requested, adding flag to vm configuration");
|
||||
details.put(VmDetailConstants.NESTED_VIRTUALIZATION_FLAG, nestedVirt);
|
||||
to.setDetails(details);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Determine the VM's OS description
|
||||
GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
|
||||
to.setOs(guestOS.getDisplayName());
|
||||
|
||||
@ -232,6 +232,7 @@ import com.vmware.vim25.ClusterDasConfigInfo;
|
||||
import com.vmware.vim25.ComputeResourceSummary;
|
||||
import com.vmware.vim25.DatastoreSummary;
|
||||
import com.vmware.vim25.DynamicProperty;
|
||||
import com.vmware.vim25.HostCapability;
|
||||
import com.vmware.vim25.HostFirewallInfo;
|
||||
import com.vmware.vim25.HostFirewallRuleset;
|
||||
import com.vmware.vim25.HostNetworkTrafficShapingPolicy;
|
||||
@ -2147,6 +2148,23 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
||||
VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(),
|
||||
vmSpec.getMinSpeed(),(int) (vmSpec.getMaxRam()/(1024*1024)), ramMb,
|
||||
translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).value(), vmSpec.getLimitCpuUse());
|
||||
|
||||
if ("true".equals(vmSpec.getDetails().get(VmDetailConstants.NESTED_VIRTUALIZATION_FLAG))) {
|
||||
s_logger.debug("Nested Virtualization enabled in configuration, checking hypervisor capability");
|
||||
ManagedObjectReference hostMor = vmMo.getRunningHost().getMor();
|
||||
ManagedObjectReference computeMor = context.getVimClient().getMoRefProp(hostMor, "parent");
|
||||
ManagedObjectReference environmentBrowser =
|
||||
context.getVimClient().getMoRefProp(computeMor, "environmentBrowser");
|
||||
HostCapability hostCapability = context.getService().queryTargetCapabilities(environmentBrowser, hostMor);
|
||||
if (hostCapability.isNestedHVSupported()) {
|
||||
s_logger.debug("Hypervisor supports nested virtualization, enabling for VM " + vmSpec.getName());
|
||||
vmConfigSpec.setNestedHVEnabled(true);
|
||||
}
|
||||
else {
|
||||
s_logger.warn("Hypervisor doesn't support nested virtualization, unable to set config for VM " +vmSpec.getName());
|
||||
vmConfigSpec.setNestedHVEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[totalChangeDevices];
|
||||
int i = 0;
|
||||
|
||||
@ -39,7 +39,7 @@ import org.apache.cloudstack.storage.command.CreatePrimaryDataStoreCmd;
|
||||
import org.apache.cloudstack.storage.command.CreateVolumeFromBaseImageCommand;
|
||||
import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
|
||||
import org.apache.cloudstack.storage.datastore.protocol.DataStoreProtocol;
|
||||
import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.ImageOnPrimaryDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.VolumeTO;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.HttpResponse;
|
||||
@ -207,7 +207,7 @@ public class XenServerStorageResource {
|
||||
|
||||
protected Answer execute(CreateVolumeFromBaseImageCommand cmd) {
|
||||
VolumeTO volume = cmd.getVolume();
|
||||
ImageOnPrimayDataStoreTO baseImage = cmd.getImage();
|
||||
ImageOnPrimaryDataStoreTO baseImage = cmd.getImage();
|
||||
Connection conn = hypervisorResource.getConnection();
|
||||
|
||||
try {
|
||||
|
||||
@ -158,8 +158,6 @@
|
||||
<exclude>com/cloud/network/vpn/RemoteAccessVpnTest.java</exclude>
|
||||
<exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
|
||||
<exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
|
||||
<!-- see CLOUDSTACK-1884 -->
|
||||
<exclude>org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@ -768,11 +768,13 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
GlobalLoadBalancerResponse response = new GlobalLoadBalancerResponse();
|
||||
response.setAlgorithm(globalLoadBalancerRule.getAlgorithm());
|
||||
response.setStickyMethod(globalLoadBalancerRule.getPersistence());
|
||||
response.setServiceType(globalLoadBalancerRule.getServiceType());
|
||||
response.setServiceDomainName(globalLoadBalancerRule.getGslbDomain());
|
||||
response.setName(globalLoadBalancerRule.getName());
|
||||
response.setDescription(globalLoadBalancerRule.getDescription());
|
||||
response.setRegionIdId(globalLoadBalancerRule.getRegion());
|
||||
response.setId(globalLoadBalancerRule.getUuid());
|
||||
response.setObjectName("globalloadbalancer");
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@ -2119,7 +2119,11 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
domainRecord = _domainDao.findById(domainRecord.getParent());
|
||||
domainIds.add(domainRecord.getId());
|
||||
}
|
||||
sc.addAnd("domainId", SearchCriteria.Op.IN, domainIds.toArray());
|
||||
SearchCriteria<ServiceOfferingJoinVO> spc = _srvOfferingJoinDao.createSearchCriteria();
|
||||
|
||||
spc.addOr("domainId", SearchCriteria.Op.IN, domainIds.toArray());
|
||||
spc.addOr("domainId", SearchCriteria.Op.NULL);
|
||||
sc.addAnd("domainId", SearchCriteria.Op.SC, spc);
|
||||
|
||||
// include also public offering if no keyword, name and id specified
|
||||
if ( keyword == null && name == null && id == null ){
|
||||
|
||||
@ -276,6 +276,7 @@ public enum Config {
|
||||
VmwareRootDiskControllerType("Advanced", ManagementServer.class, String.class, "vmware.root.disk.controller", "ide", "Specify the default disk controller for root volumes, valid values are scsi, ide", null),
|
||||
VmwareSystemVmNicDeviceType("Advanced", ManagementServer.class, String.class, "vmware.systemvm.nic.device.type", "E1000", "Specify the default network device type for system VMs, valid values are E1000, PCNet32, Vmxnet2, Vmxnet3", null),
|
||||
VmwareRecycleHungWorker("Advanced", ManagementServer.class, Boolean.class, "vmware.recycle.hung.wokervm", "false", "Specify whether or not to recycle hung worker VMs", null),
|
||||
VmwareEnableNestedVirtualization("Advanced", ManagementServer.class, Boolean.class, "vmware.nested.virtualization", "false", "When set to true this will enable nested virtualization when this is supported by the hypervisor", null),
|
||||
|
||||
// Midonet
|
||||
MidoNetAPIServerAddress("Network", ManagementServer.class, String.class, "midonet.apiserver.address", "http://localhost:8081", "Specify the address at which the Midonet API server can be contacted (if using Midonet)", null),
|
||||
|
||||
26
server/src/com/cloud/network/NetworkModelImpl.java
Normal file → Executable file
26
server/src/com/cloud/network/NetworkModelImpl.java
Normal file → Executable file
@ -88,7 +88,9 @@ import com.cloud.offerings.NetworkOfferingServiceMapVO;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
import com.cloud.projects.dao.ProjectAccountDao;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.DomainManager;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
import com.cloud.utils.component.AdapterBase;
|
||||
@ -178,7 +180,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
UserIpv6AddressDao _ipv6Dao;
|
||||
@Inject
|
||||
NicSecondaryIpDao _nicSecondaryIpDao;;
|
||||
|
||||
@Inject
|
||||
private ProjectAccountDao _projectAccountDao;
|
||||
|
||||
private final HashMap<String, NetworkOfferingVO> _systemNetworks = new HashMap<String, NetworkOfferingVO>(5);
|
||||
static Long _privateOfferingId = null;
|
||||
@ -1010,7 +1013,10 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
Set<Provider> supportedProviders = new HashSet<Provider>();
|
||||
|
||||
if (service != null) {
|
||||
supportedProviders.addAll(s_serviceToImplementedProvidersMap.get(service));
|
||||
List<Provider> providers = s_serviceToImplementedProvidersMap.get(service);
|
||||
if (providers != null && !providers.isEmpty()) {
|
||||
supportedProviders.addAll(providers);
|
||||
}
|
||||
} else {
|
||||
for (List<Provider> pList : s_serviceToImplementedProvidersMap.values()) {
|
||||
supportedProviders.addAll(pList);
|
||||
@ -1472,10 +1478,20 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
public void checkNetworkPermissions(Account owner, Network network) {
|
||||
// Perform account permission check
|
||||
if (network.getGuestType() != Network.GuestType.Shared) {
|
||||
List<NetworkVO> networkMap = _networksDao.listBy(owner.getId(), network.getId());
|
||||
if (networkMap == null || networkMap.isEmpty()) {
|
||||
throw new PermissionDeniedException("Unable to use network with id= " + network.getUuid() + ", permission denied");
|
||||
AccountVO networkOwner = _accountDao.findById(network.getAccountId());
|
||||
if(networkOwner == null)
|
||||
throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", network does not have an owner");
|
||||
if(owner.getType() != Account.ACCOUNT_TYPE_PROJECT && networkOwner.getType() == Account.ACCOUNT_TYPE_PROJECT){
|
||||
if(!_projectAccountDao.canAccessProjectAccount(owner.getAccountId(), network.getAccountId())){
|
||||
throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", permission denied");
|
||||
}
|
||||
}else{
|
||||
List<NetworkVO> networkMap = _networksDao.listBy(owner.getId(), network.getId());
|
||||
if (networkMap == null || networkMap.isEmpty()) {
|
||||
throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", permission denied");
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!isNetworkAvailableInDomain(network.getId(), owner.getDomainId())) {
|
||||
throw new PermissionDeniedException("Shared network id=" + network.getUuid() + " is not available in domain id=" + owner.getDomainId());
|
||||
|
||||
@ -1181,29 +1181,17 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
||||
}
|
||||
}
|
||||
|
||||
ClusterDetailsVO memory_detail = _clusterDetailsDao.findDetail(cluster.getId(),"memoryOvercommitRatio");
|
||||
if( memory_detail == null){
|
||||
if (memoryovercommitratio.compareTo(1f) > 0){
|
||||
memory_detail = new ClusterDetailsVO(cluster.getId(),"memoryOvercommitRatio",Float.toString(memoryovercommitratio));
|
||||
_clusterDetailsDao.persist(memory_detail);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (memoryovercommitratio != null) {
|
||||
ClusterDetailsVO memory_detail = _clusterDetailsDao.findDetail(cluster.getId(),"memoryOvercommitRatio");
|
||||
memory_detail.setValue(Float.toString(memoryovercommitratio));
|
||||
_clusterDetailsDao.update(memory_detail.getId(),memory_detail);
|
||||
}
|
||||
|
||||
ClusterDetailsVO cpu_detail = _clusterDetailsDao.findDetail(cluster.getId(),"cpuOvercommitRatio");
|
||||
if( cpu_detail == null){
|
||||
if (cpuovercommitratio.compareTo(1f) > 0){
|
||||
cpu_detail = new ClusterDetailsVO(cluster.getId(),"cpuOvercommitRatio",Float.toString(cpuovercommitratio));
|
||||
_clusterDetailsDao.persist(cpu_detail);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (cpuovercommitratio != null) {
|
||||
ClusterDetailsVO cpu_detail = _clusterDetailsDao.findDetail(cluster.getId(),"cpuOvercommitRatio");
|
||||
cpu_detail.setValue(Float.toString(cpuovercommitratio));
|
||||
_clusterDetailsDao.update(cpu_detail.getId(),cpu_detail);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (doUpdate) {
|
||||
|
||||
@ -41,7 +41,7 @@ public interface AffinityGroupVMMapDao extends GenericDao<AffinityGroupVMMapVO,
|
||||
|
||||
int deleteVM(long instanceId);
|
||||
|
||||
AffinityGroupVMMapVO findByVmIdType(long instanceId, String type);
|
||||
List<AffinityGroupVMMapVO> findByVmIdType(long instanceId, String type);
|
||||
|
||||
void updateMap(Long vmId, List<Long> affinityGroupIds);
|
||||
}
|
||||
|
||||
@ -140,11 +140,11 @@ public class AffinityGroupVMMapDaoImpl extends GenericDaoBase<AffinityGroupVMMap
|
||||
}
|
||||
|
||||
@Override
|
||||
public AffinityGroupVMMapVO findByVmIdType(long instanceId, String type) {
|
||||
public List<AffinityGroupVMMapVO> findByVmIdType(long instanceId, String type) {
|
||||
SearchCriteria<AffinityGroupVMMapVO> sc = ListByVmIdType.create();
|
||||
sc.setParameters("instanceId", instanceId);
|
||||
sc.setJoinParameters("groupSearch", "type", type);
|
||||
return findOneBy(sc);
|
||||
return listBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -42,6 +42,7 @@ import com.cloud.dc.dao.AccountVlanMapDaoImpl;
|
||||
import com.cloud.dc.dao.ClusterDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDao;
|
||||
import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterVnetDaoImpl;
|
||||
import com.cloud.dc.dao.DcDetailsDaoImpl;
|
||||
@ -51,6 +52,7 @@ import com.cloud.dc.dao.PodVlanMapDaoImpl;
|
||||
import com.cloud.dc.dao.VlanDaoImpl;
|
||||
import com.cloud.domain.dao.DomainDaoImpl;
|
||||
import com.cloud.event.EventUtils;
|
||||
import com.cloud.event.dao.EventDao;
|
||||
import com.cloud.event.dao.EventDaoImpl;
|
||||
import com.cloud.event.dao.UsageEventDaoImpl;
|
||||
import com.cloud.host.dao.HostDaoImpl;
|
||||
@ -122,15 +124,15 @@ import com.cloud.vm.dao.VMInstanceDaoImpl;
|
||||
UserAccountJoinDaoImpl.class, CapacityDaoImpl.class, SnapshotDaoImpl.class, HostDaoImpl.class,
|
||||
VMInstanceDaoImpl.class, HostTransferMapDaoImpl.class, PortForwardingRulesDaoImpl.class,
|
||||
PrivateIpDaoImpl.class, UsageEventDaoImpl.class, PodVlanMapDaoImpl.class, DiskOfferingDaoImpl.class,
|
||||
DataCenterDaoImpl.class, DataCenterIpAddressDaoImpl.class, DataCenterLinkLocalIpAddressDaoImpl.class,
|
||||
DataCenterDaoImpl.class, DataCenterIpAddressDaoImpl.class,
|
||||
DataCenterVnetDaoImpl.class, PodVlanDaoImpl.class, DcDetailsDaoImpl.class, NicSecondaryIpDaoImpl.class,
|
||||
UserIpv6AddressDaoImpl.class, S3DaoImpl.class, UserDaoImpl.class, NicDaoImpl.class, NetworkDomainDaoImpl.class,
|
||||
HostDetailsDaoImpl.class, HostTagsDaoImpl.class, ClusterDaoImpl.class, FirewallRulesDaoImpl.class,
|
||||
FirewallRulesCidrsDaoImpl.class, PhysicalNetworkDaoImpl.class, PhysicalNetworkTrafficTypeDaoImpl.class,
|
||||
PhysicalNetworkServiceProviderDaoImpl.class, LoadBalancerDaoImpl.class, NetworkServiceMapDaoImpl.class,
|
||||
PrimaryDataStoreDaoImpl.class, StoragePoolDetailsDaoImpl.class, AffinityGroupServiceImpl.class,
|
||||
ComponentContext.class, AffinityGroupProcessor.class, UserVmVO.class, EventUtils.class, UserVmVO.class,
|
||||
EventDaoImpl.class }, includeFilters = { @Filter(value = AffinityApiTestConfiguration.Library.class, type = FilterType.CUSTOM) }, useDefaultFilters = false)
|
||||
ComponentContext.class, AffinityGroupProcessor.class, UserVmVO.class, EventUtils.class, UserVmVO.class
|
||||
}, includeFilters = { @Filter(value = AffinityApiTestConfiguration.Library.class, type = FilterType.CUSTOM) }, useDefaultFilters = false)
|
||||
public class AffinityApiTestConfiguration {
|
||||
|
||||
@Bean
|
||||
@ -308,6 +310,11 @@ public class AffinityApiTestConfiguration {
|
||||
public NetworkOfferingDao networkOfferingDao() {
|
||||
return Mockito.mock(NetworkOfferingDao.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public EventDao eventDao() {
|
||||
return Mockito.mock(EventDao.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public NetworkDao networkDao() {
|
||||
@ -319,6 +326,11 @@ public class AffinityApiTestConfiguration {
|
||||
return Mockito.mock(NetworkOfferingServiceMapDao.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DataCenterLinkLocalIpAddressDao datacenterLinkLocalIpAddressDao() {
|
||||
return Mockito.mock(DataCenterLinkLocalIpAddressDao.class);
|
||||
}
|
||||
|
||||
public static class Library implements TypeFilter {
|
||||
|
||||
@Override
|
||||
|
||||
@ -21,9 +21,7 @@ import static org.mockito.Matchers.anyLong;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
|
||||
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
|
||||
@ -31,19 +29,20 @@ import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.cloud.event.EventUtils;
|
||||
import com.cloud.event.EventVO;
|
||||
import com.cloud.event.dao.EventDao;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.exception.ResourceInUseException;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.user.AccountManagerImpl;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.UserContext;
|
||||
import com.cloud.user.UserContextInitializer;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
@ -75,11 +74,17 @@ public class AffinityApiUnitTest {
|
||||
@Inject
|
||||
AffinityGroupVMMapDao _affinityGroupVMMapDao;
|
||||
|
||||
@Inject
|
||||
AffinityGroupDao _affinityGroupDao;
|
||||
|
||||
@Inject
|
||||
EventUtils _eventUtils;
|
||||
|
||||
@Inject
|
||||
AccountDao _accountDao;
|
||||
|
||||
@Inject
|
||||
EventDao _eventDao;
|
||||
|
||||
private static long domainId = 5L;
|
||||
|
||||
@ -102,6 +107,14 @@ public class AffinityApiUnitTest {
|
||||
when(_acctMgr.finalizeOwner((Account) anyObject(), anyString(), anyLong(), anyLong())).thenReturn(acct);
|
||||
when(_processor.getType()).thenReturn("mock");
|
||||
when(_accountDao.findByIdIncludingRemoved(0L)).thenReturn(acct);
|
||||
|
||||
AffinityGroupVO group = new AffinityGroupVO("group1", "mock", "mock group", domainId, 200L);
|
||||
Mockito.when(_affinityGroupDao.persist(Mockito.any(AffinityGroupVO.class))).thenReturn(group);
|
||||
Mockito.when(_affinityGroupDao.findById(Mockito.anyLong())).thenReturn(group);
|
||||
Mockito.when(_affinityGroupDao.findByAccountAndName(Mockito.anyLong(), Mockito.anyString())).thenReturn(group);
|
||||
Mockito.when(_affinityGroupDao.lockRow(Mockito.anyLong(), anyBoolean())).thenReturn(group);
|
||||
Mockito.when(_affinityGroupDao.expunge(Mockito.anyLong())).thenReturn(true);
|
||||
Mockito.when(_eventDao.persist(Mockito.any(EventVO.class))).thenReturn(new EventVO());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -41,6 +41,7 @@ import com.cloud.dc.dao.AccountVlanMapDaoImpl;
|
||||
import com.cloud.dc.dao.ClusterDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDao;
|
||||
import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl;
|
||||
import com.cloud.dc.dao.DataCenterVnetDaoImpl;
|
||||
import com.cloud.dc.dao.DcDetailsDaoImpl;
|
||||
@ -135,7 +136,6 @@ import com.cloud.vm.dao.VMInstanceDaoImpl;
|
||||
DiskOfferingDaoImpl.class,
|
||||
DataCenterDaoImpl.class,
|
||||
DataCenterIpAddressDaoImpl.class,
|
||||
DataCenterLinkLocalIpAddressDaoImpl.class,
|
||||
DataCenterVnetDaoImpl.class,
|
||||
PodVlanDaoImpl.class,
|
||||
DcDetailsDaoImpl.class,
|
||||
@ -319,6 +319,11 @@ public class ChildTestConfiguration {
|
||||
return Mockito.mock(NetworkOfferingServiceMapDao.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DataCenterLinkLocalIpAddressDao datacenterLinkLocalIpAddressDao() {
|
||||
return Mockito.mock(DataCenterLinkLocalIpAddressDao.class);
|
||||
}
|
||||
|
||||
public static class Library implements TypeFilter {
|
||||
|
||||
@Override
|
||||
|
||||
@ -49,7 +49,6 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.UserContext;
|
||||
import com.cloud.user.UserContextInitializer;
|
||||
import com.cloud.user.UserVO;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
|
||||
|
||||
@ -91,7 +91,7 @@ class Services:
|
||||
"sleep": 60,
|
||||
"timeout": 10,
|
||||
#Migrate VM to hostid
|
||||
"ostype": 'CentOS 5.6 (64-bit)',
|
||||
"ostype": 'CentOS 5.3 (64-bit)',
|
||||
# CentOS 5.3 (64-bit)
|
||||
}
|
||||
|
||||
@ -164,7 +164,7 @@ class TestScaleVm(cloudstackTestCase):
|
||||
cleanup_resources(self.apiclient, self.cleanup)
|
||||
return
|
||||
|
||||
@attr(tags = ["advanced", "basic", "multicluster", "storagemotion", "xenserver"])
|
||||
@attr(tags = ["xenserver", "advanced", "basic"])
|
||||
def test_01_scale_vm(self):
|
||||
"""Test scale virtual machine
|
||||
"""
|
||||
|
||||
@ -19,22 +19,25 @@
|
||||
sourcedir=~/incubator-cloudstack/
|
||||
common_content_dir=/usr/share/publican/Common_Content
|
||||
publican_path=/usr/bin/publican
|
||||
output_format="html,pdf"
|
||||
|
||||
usage(){
|
||||
echo "usage: $0 [-s source dir] [-c publican common content] [-p path to publican]"
|
||||
echo " -s sets the source directory (defaults to $sourcedir)"
|
||||
echo " -c sets the public common content directory (defaults to $common_content_dir)"
|
||||
echo " -p sets the path to the publican binary (defaults to $publican_path)"
|
||||
echo " -f sets the output format (defaults to $output_format)"
|
||||
echo " -h"
|
||||
}
|
||||
|
||||
while getopts v:s:c:p:h opt
|
||||
while getopts v:s:c:p:f:h opt
|
||||
do
|
||||
case "$opt" in
|
||||
v) version="$OPTARG";;
|
||||
s) sourcedir="$OPTARG";;
|
||||
c) common_content_dir="$OPTARG";;
|
||||
p) publican_path="$OPTARG";;
|
||||
f) output_format="$OPTARG";;
|
||||
h) usage
|
||||
exit 0;;
|
||||
\?)
|
||||
@ -48,8 +51,13 @@ if [ ! -x "$publican_path" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$sourcedir/docs" ]; then
|
||||
echo "$sourcedir/docs doesn't seem to exist? Maybe set -s?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $sourcedir/docs
|
||||
cp -R /usr/share/publican/Common_Content .
|
||||
ln -s $sourcedir/docs/publican-cloudstack Common_Content/cloudstack
|
||||
publican build --config=publican-installation.cfg --formats html,pdf --langs en-US --common_content=$sourcedir/docs/Common_Content
|
||||
publican build --config=publican-installation.cfg --formats $output_format --langs en-US --common_content=$sourcedir/docs/Common_Content
|
||||
rm -r Common_Content
|
||||
@ -55,6 +55,12 @@
|
||||
actions: {
|
||||
add: {
|
||||
label: 'label.add.region',
|
||||
preFilter: function(args) {
|
||||
if(isAdmin())
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
},
|
||||
messages: {
|
||||
notification: function() { return 'label.add.region'; }
|
||||
},
|
||||
@ -98,10 +104,9 @@
|
||||
$.ajax({
|
||||
url: createURL('listRegions&listAll=true'),
|
||||
success: function(json) {
|
||||
var regions = json.listregionsresponse.region
|
||||
|
||||
args.response.success({
|
||||
data: regions ? regions : []
|
||||
var items = json.listregionsresponse.region;
|
||||
args.response.success({
|
||||
data: items
|
||||
});
|
||||
},
|
||||
error: function(json) {
|
||||
@ -193,6 +198,7 @@
|
||||
var region = json.listregionsresponse.region
|
||||
|
||||
args.response.success({
|
||||
actionFilter: regionActionfilter,
|
||||
data: region ? region[0] : {}
|
||||
});
|
||||
},
|
||||
@ -382,4 +388,14 @@
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var regionActionfilter = function(args) {
|
||||
var allowedActions = [];
|
||||
if(isAdmin()) {
|
||||
allowedActions.push("edit");
|
||||
allowedActions.push("remove");
|
||||
}
|
||||
return allowedActions;
|
||||
}
|
||||
|
||||
})(cloudStack);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user