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 @@ -52,4 +52,6 @@ public interface HypervisorCapabilities extends Identity, InternalIdentity {

boolean isStorageMotionSupported();

Boolean isVmSnapshotEnabled();

}
3 changes: 2 additions & 1 deletion api/src/main/java/com/cloud/server/ManagementService.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;
import org.apache.cloudstack.api.command.admin.config.UpdateHypervisorCapabilitiesCmd;
import org.apache.cloudstack.api.command.admin.guest.AddGuestOsCmd;
import org.apache.cloudstack.api.command.admin.guest.AddGuestOsMappingCmd;
import org.apache.cloudstack.api.command.admin.guest.ListGuestOsMappingCmd;
Expand Down Expand Up @@ -407,7 +408,7 @@ public interface ManagementService {
Pair<List<? extends HypervisorCapabilities>, Integer> listHypervisorCapabilities(Long id, HypervisorType hypervisorType, String keyword, Long startIndex,
Long pageSizeVal);

HypervisorCapabilities updateHypervisorCapabilities(Long id, Long maxGuestsLimit, Boolean securityGroupEnabled);
HypervisorCapabilities updateHypervisorCapabilities(UpdateHypervisorCapabilitiesCmd cmd);

/**
* list all the top consumed resources across different capacity types
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -590,6 +590,7 @@ public class ApiConstants {
public static final String MIGRATE_ALLOWED = "migrateallowed";
public static final String MIGRATE_TO = "migrateto";
public static final String GUID = "guid";
public static final String VM_SNAPSHOT_ENABELD = "vmsnapshotenabled";
public static final String VSWITCH_TYPE_GUEST_TRAFFIC = "guestvswitchtype";
public static final String VSWITCH_TYPE_PUBLIC_TRAFFIC = "publicvswitchtype";
public static final String VSWITCH_NAME_GUEST_TRAFFIC = "guestvswitchname";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,18 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd {
@Parameter(name = ApiConstants.MAX_GUESTS_LIMIT, type = CommandType.LONG, description = "the max number of Guest VMs per host for this hypervisor.")
private Long maxGuestsLimit;

@Parameter(name = ApiConstants.MAX_DATA_VOLUMES_LIMIT, type = CommandType.INTEGER, description = "the maximum number of Data Volumes that can be attached to a VM for this hypervisor.", since = "4.16.0")
private Integer maxDataVolumesLimit;

@Parameter(name = ApiConstants.STORAGE_MOTION_ENABLED, type = CommandType.BOOLEAN, description = "set true to enable storage motion support for this hypervisor", since = "4.16.0")
private Boolean storageMotionSupported;

@Parameter(name = ApiConstants.MAX_HOSTS_PER_CLUSTER, type = CommandType.INTEGER, description = "the maximum number of the hypervisor hosts per cluster ", since = "4.16.0")
private Integer maxHostsPerClusterLimit;

@Parameter(name = ApiConstants.VM_SNAPSHOT_ENABELD, type = CommandType.BOOLEAN, description = "set true to enable VM snapshots for this hypervisor", since = "4.16.0")
private Boolean vmSnapshotEnabled;

/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
Expand All @@ -68,6 +80,22 @@ public Long getMaxGuestsLimit() {
return maxGuestsLimit;
}

public Integer getMaxDataVolumesLimit() {
return maxDataVolumesLimit;
}

public Boolean getStorageMotionSupported() {
return storageMotionSupported;
}

public Integer getMaxHostsPerClusterLimit() {
return maxHostsPerClusterLimit;
}

public Boolean getVmSnapshotEnabled() {
return vmSnapshotEnabled;
}

/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
Expand All @@ -84,7 +112,7 @@ public long getEntityOwnerId() {

@Override
public void execute() {
HypervisorCapabilities result = _mgr.updateHypervisorCapabilities(getId(), getMaxGuestsLimit(), getSecurityGroupEnabled());
HypervisorCapabilities result = _mgr.updateHypervisorCapabilities(this);
if (result != null) {
HypervisorCapabilitiesResponse response = _responseGenerator.createHypervisorCapabilitiesResponse(result);
response.setResponseName(getCommandName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,14 @@
// under the License.
package org.apache.cloudstack.api.response;

import com.google.gson.annotations.SerializedName;

import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.EntityReference;

import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.HypervisorCapabilities;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;

@EntityReference(value = HypervisorCapabilities.class)
public class HypervisorCapabilitiesResponse extends BaseResponse {
Expand Down Expand Up @@ -60,6 +59,10 @@ public class HypervisorCapabilitiesResponse extends BaseResponse {
@Param(description = "true if storage motion is supported")
private boolean isStorageMotionSupported;

@SerializedName(ApiConstants.VM_SNAPSHOT_ENABELD)
@Param(description = "true if VM snapshots are enabled for this hypervisor")
private boolean isVmSnapshotEnabled;

public String getId() {
return id;
}
Expand Down Expand Up @@ -123,4 +126,12 @@ public Integer getMaxHostsPerCluster() {
public void setMaxHostsPerCluster(Integer maxHostsPerCluster) {
this.maxHostsPerCluster = maxHostsPerCluster;
}

public boolean isVmSnapshotEnabled() {
return isVmSnapshotEnabled;
}

public void setVmSnapshotEnabled(boolean vmSnapshotEnabled) {
isVmSnapshotEnabled = vmSnapshotEnabled;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,8 @@ public void setMaxHostsPerCluster(Integer maxHostsPerCluster) {
this.maxHostsPerCluster = maxHostsPerCluster;
}

public Boolean getVmSnapshotEnabled() {
@Override
public Boolean isVmSnapshotEnabled() {
return vmSnapshotEnabled;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public Integer getMaxHostsPerCluster(HypervisorType hypervisorType, String hyper
@Override
public Boolean isVmSnapshotEnabled(HypervisorType hypervisorType, String hypervisorVersion) {
HypervisorCapabilitiesVO result = getCapabilities(hypervisorType, hypervisorVersion);
return result.getVmSnapshotEnabled();
return result.isVmSnapshotEnabled();
}

@Override
Expand Down
3 changes: 2 additions & 1 deletion server/src/main/java/com/cloud/api/ApiResponseHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@

import javax.inject.Inject;

import com.cloud.server.ResourceIcon;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
import org.apache.cloudstack.affinity.AffinityGroup;
Expand Down Expand Up @@ -304,6 +303,7 @@
import com.cloud.projects.ProjectInvitation;
import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.resource.RollingMaintenanceManager;
import com.cloud.server.ResourceIcon;
import com.cloud.server.ResourceTag;
import com.cloud.server.ResourceTag.ResourceObjectType;
import com.cloud.service.ServiceOfferingVO;
Expand Down Expand Up @@ -2614,6 +2614,7 @@ public HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(Hyper
hpvCapabilitiesResponse.setMaxDataVolumesLimit(hpvCapabilities.getMaxDataVolumesLimit());
hpvCapabilitiesResponse.setMaxHostsPerCluster(hpvCapabilities.getMaxHostsPerCluster());
hpvCapabilitiesResponse.setIsStorageMotionSupported(hpvCapabilities.isStorageMotionSupported());
hpvCapabilitiesResponse.setVmSnapshotEnabled(hpvCapabilities.isVmSnapshotEnabled());
return hpvCapabilitiesResponse;
}

Expand Down
41 changes: 32 additions & 9 deletions server/src/main/java/com/cloud/server/ManagementServerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,13 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;


import java.util.stream.Collectors;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.inject.Inject;
import javax.naming.ConfigurationException;

import com.cloud.dc.DomainVlanMapVO;
import com.cloud.dc.dao.DomainVlanMapDao;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.affinity.AffinityGroupProcessor;
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
Expand Down Expand Up @@ -605,6 +601,7 @@
import com.cloud.dc.AccountVlanMapVO;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.DataCenterVO;
import com.cloud.dc.DomainVlanMapVO;
import com.cloud.dc.HostPodVO;
import com.cloud.dc.Pod;
import com.cloud.dc.PodVlanMapVO;
Expand All @@ -614,6 +611,7 @@
import com.cloud.dc.dao.AccountVlanMapDao;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.dc.dao.DomainVlanMapDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.dc.dao.PodVlanMapDao;
import com.cloud.dc.dao.VlanDao;
Expand Down Expand Up @@ -663,9 +661,9 @@
import com.cloud.network.dao.LoadBalancerVO;
import com.cloud.network.dao.NetworkAccountDao;
import com.cloud.network.dao.NetworkAccountVO;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkDomainDao;
import com.cloud.network.dao.NetworkDomainVO;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.org.Cluster;
Expand Down Expand Up @@ -4459,7 +4457,14 @@ public Pair<List<? extends HypervisorCapabilities>, Integer> listHypervisorCapab
}

@Override
public HypervisorCapabilities updateHypervisorCapabilities(final Long id, final Long maxGuestsLimit, final Boolean securityGroupEnabled) {
public HypervisorCapabilities updateHypervisorCapabilities(UpdateHypervisorCapabilitiesCmd cmd) {
final Long id = cmd.getId();
final Boolean securityGroupEnabled = cmd.getSecurityGroupEnabled();
final Long maxGuestsLimit = cmd.getMaxGuestsLimit();
final Integer maxDataVolumesLimit = cmd.getMaxDataVolumesLimit();
final Boolean storageMotionSupported = cmd.getStorageMotionSupported();
final Integer maxHostsPerClusterLimit = cmd.getMaxHostsPerClusterLimit();
final Boolean vmSnapshotEnabled = cmd.getVmSnapshotEnabled();
HypervisorCapabilitiesVO hpvCapabilities = _hypervisorCapabilitiesDao.findById(id, true);

if (hpvCapabilities == null) {
Expand All @@ -4468,19 +4473,37 @@ public HypervisorCapabilities updateHypervisorCapabilities(final Long id, final
throw ex;
}

final boolean updateNeeded = maxGuestsLimit != null || securityGroupEnabled != null;
final boolean updateNeeded = securityGroupEnabled != null || maxGuestsLimit != null ||
maxDataVolumesLimit != null || storageMotionSupported != null || maxHostsPerClusterLimit != null ||
vmSnapshotEnabled != null;
if (!updateNeeded) {
return hpvCapabilities;
}

hpvCapabilities = _hypervisorCapabilitiesDao.createForUpdate(id);

if (securityGroupEnabled != null) {
hpvCapabilities.setSecurityGroupEnabled(securityGroupEnabled);
}

if (maxGuestsLimit != null) {
hpvCapabilities.setMaxGuestsLimit(maxGuestsLimit);
}

if (securityGroupEnabled != null) {
hpvCapabilities.setSecurityGroupEnabled(securityGroupEnabled);
if (maxDataVolumesLimit != null) {
hpvCapabilities.setMaxDataVolumesLimit(maxDataVolumesLimit);
}

if (storageMotionSupported != null) {
hpvCapabilities.setStorageMotionSupported(storageMotionSupported);
}

if (maxHostsPerClusterLimit != null) {
hpvCapabilities.setMaxHostsPerCluster(maxHostsPerClusterLimit);
}

if (vmSnapshotEnabled != null) {
hpvCapabilities.setVmSnapshotEnabled(vmSnapshotEnabled);
}

if (_hypervisorCapabilitiesDao.update(id, hpvCapabilities)) {
Expand Down
Loading