Skip to content

Commit 62b806a

Browse files
api,server: add params for updatehypervisorcapabilities API (apache#5473)
* api,server: add params for updatehypervisorcapabilities API Allows updating following capabilities for a hypervisor, version: - Max DATA volumes limit - Storage motion supported - Max hosts per cluster - VM snapshot enabled * added test * changes Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * Update test/integration/smoke/test_hypervisor_capabilities.py Co-authored-by: dahn <daan.hoogland@gmail.com>
1 parent 8adb8df commit 62b806a

11 files changed

Lines changed: 378 additions & 16 deletions

File tree

api/src/main/java/com/cloud/hypervisor/HypervisorCapabilities.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,6 @@ public interface HypervisorCapabilities extends Identity, InternalIdentity {
5252

5353
boolean isStorageMotionSupported();
5454

55+
Boolean isVmSnapshotEnabled();
56+
5557
}

api/src/main/java/com/cloud/server/ManagementService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

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

410-
HypervisorCapabilities updateHypervisorCapabilities(Long id, Long maxGuestsLimit, Boolean securityGroupEnabled);
411+
HypervisorCapabilities updateHypervisorCapabilities(UpdateHypervisorCapabilitiesCmd cmd);
411412

412413
/**
413414
* list all the top consumed resources across different capacity types

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@ public class ApiConstants {
590590
public static final String MIGRATE_ALLOWED = "migrateallowed";
591591
public static final String MIGRATE_TO = "migrateto";
592592
public static final String GUID = "guid";
593+
public static final String VM_SNAPSHOT_ENABELD = "vmsnapshotenabled";
593594
public static final String VSWITCH_TYPE_GUEST_TRAFFIC = "guestvswitchtype";
594595
public static final String VSWITCH_TYPE_PUBLIC_TRAFFIC = "publicvswitchtype";
595596
public static final String VSWITCH_NAME_GUEST_TRAFFIC = "guestvswitchname";

api/src/main/java/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,18 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd {
5252
@Parameter(name = ApiConstants.MAX_GUESTS_LIMIT, type = CommandType.LONG, description = "the max number of Guest VMs per host for this hypervisor.")
5353
private Long maxGuestsLimit;
5454

55+
@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")
56+
private Integer maxDataVolumesLimit;
57+
58+
@Parameter(name = ApiConstants.STORAGE_MOTION_ENABLED, type = CommandType.BOOLEAN, description = "set true to enable storage motion support for this hypervisor", since = "4.16.0")
59+
private Boolean storageMotionSupported;
60+
61+
@Parameter(name = ApiConstants.MAX_HOSTS_PER_CLUSTER, type = CommandType.INTEGER, description = "the maximum number of the hypervisor hosts per cluster ", since = "4.16.0")
62+
private Integer maxHostsPerClusterLimit;
63+
64+
@Parameter(name = ApiConstants.VM_SNAPSHOT_ENABELD, type = CommandType.BOOLEAN, description = "set true to enable VM snapshots for this hypervisor", since = "4.16.0")
65+
private Boolean vmSnapshotEnabled;
66+
5567
/////////////////////////////////////////////////////
5668
/////////////////// Accessors ///////////////////////
5769
/////////////////////////////////////////////////////
@@ -68,6 +80,22 @@ public Long getMaxGuestsLimit() {
6880
return maxGuestsLimit;
6981
}
7082

83+
public Integer getMaxDataVolumesLimit() {
84+
return maxDataVolumesLimit;
85+
}
86+
87+
public Boolean getStorageMotionSupported() {
88+
return storageMotionSupported;
89+
}
90+
91+
public Integer getMaxHostsPerClusterLimit() {
92+
return maxHostsPerClusterLimit;
93+
}
94+
95+
public Boolean getVmSnapshotEnabled() {
96+
return vmSnapshotEnabled;
97+
}
98+
7199
/////////////////////////////////////////////////////
72100
/////////////// API Implementation///////////////////
73101
/////////////////////////////////////////////////////
@@ -84,7 +112,7 @@ public long getEntityOwnerId() {
84112

85113
@Override
86114
public void execute() {
87-
HypervisorCapabilities result = _mgr.updateHypervisorCapabilities(getId(), getMaxGuestsLimit(), getSecurityGroupEnabled());
115+
HypervisorCapabilities result = _mgr.updateHypervisorCapabilities(this);
88116
if (result != null) {
89117
HypervisorCapabilitiesResponse response = _responseGenerator.createHypervisorCapabilitiesResponse(result);
90118
response.setResponseName(getCommandName());

api/src/main/java/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.response;
1818

19-
import com.google.gson.annotations.SerializedName;
20-
2119
import org.apache.cloudstack.api.ApiConstants;
2220
import org.apache.cloudstack.api.BaseResponse;
2321
import org.apache.cloudstack.api.EntityReference;
2422

2523
import com.cloud.hypervisor.Hypervisor.HypervisorType;
2624
import com.cloud.hypervisor.HypervisorCapabilities;
2725
import com.cloud.serializer.Param;
26+
import com.google.gson.annotations.SerializedName;
2827

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

62+
@SerializedName(ApiConstants.VM_SNAPSHOT_ENABELD)
63+
@Param(description = "true if VM snapshots are enabled for this hypervisor")
64+
private boolean isVmSnapshotEnabled;
65+
6366
public String getId() {
6467
return id;
6568
}
@@ -123,4 +126,12 @@ public Integer getMaxHostsPerCluster() {
123126
public void setMaxHostsPerCluster(Integer maxHostsPerCluster) {
124127
this.maxHostsPerCluster = maxHostsPerCluster;
125128
}
129+
130+
public boolean isVmSnapshotEnabled() {
131+
return isVmSnapshotEnabled;
132+
}
133+
134+
public void setVmSnapshotEnabled(boolean vmSnapshotEnabled) {
135+
isVmSnapshotEnabled = vmSnapshotEnabled;
136+
}
126137
}

engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ public void setMaxHostsPerCluster(Integer maxHostsPerCluster) {
189189
this.maxHostsPerCluster = maxHostsPerCluster;
190190
}
191191

192-
public Boolean getVmSnapshotEnabled() {
192+
@Override
193+
public Boolean isVmSnapshotEnabled() {
193194
return vmSnapshotEnabled;
194195
}
195196

engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public Integer getMaxHostsPerCluster(HypervisorType hypervisorType, String hyper
105105
@Override
106106
public Boolean isVmSnapshotEnabled(HypervisorType hypervisorType, String hypervisorVersion) {
107107
HypervisorCapabilitiesVO result = getCapabilities(hypervisorType, hypervisorVersion);
108-
return result.getVmSnapshotEnabled();
108+
return result.isVmSnapshotEnabled();
109109
}
110110

111111
@Override

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434

3535
import javax.inject.Inject;
3636

37-
import com.cloud.server.ResourceIcon;
3837
import org.apache.cloudstack.acl.ControlledEntity;
3938
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
4039
import org.apache.cloudstack.affinity.AffinityGroup;
@@ -304,6 +303,7 @@
304303
import com.cloud.projects.ProjectInvitation;
305304
import com.cloud.region.ha.GlobalLoadBalancerRule;
306305
import com.cloud.resource.RollingMaintenanceManager;
306+
import com.cloud.server.ResourceIcon;
307307
import com.cloud.server.ResourceTag;
308308
import com.cloud.server.ResourceTag.ResourceObjectType;
309309
import com.cloud.service.ServiceOfferingVO;
@@ -2614,6 +2614,7 @@ public HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(Hyper
26142614
hpvCapabilitiesResponse.setMaxDataVolumesLimit(hpvCapabilities.getMaxDataVolumesLimit());
26152615
hpvCapabilitiesResponse.setMaxHostsPerCluster(hpvCapabilities.getMaxHostsPerCluster());
26162616
hpvCapabilitiesResponse.setIsStorageMotionSupported(hpvCapabilities.isStorageMotionSupported());
2617+
hpvCapabilitiesResponse.setVmSnapshotEnabled(hpvCapabilities.isVmSnapshotEnabled());
26172618
return hpvCapabilitiesResponse;
26182619
}
26192620

server/src/main/java/com/cloud/server/ManagementServerImpl.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,13 @@
3535
import java.util.concurrent.ScheduledExecutorService;
3636
import java.util.concurrent.TimeUnit;
3737
import java.util.function.Predicate;
38-
39-
4038
import java.util.stream.Collectors;
4139

4240
import javax.crypto.Mac;
4341
import javax.crypto.spec.SecretKeySpec;
4442
import javax.inject.Inject;
4543
import javax.naming.ConfigurationException;
4644

47-
import com.cloud.dc.DomainVlanMapVO;
48-
import com.cloud.dc.dao.DomainVlanMapDao;
4945
import org.apache.cloudstack.acl.ControlledEntity;
5046
import org.apache.cloudstack.affinity.AffinityGroupProcessor;
5147
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
@@ -605,6 +601,7 @@
605601
import com.cloud.dc.AccountVlanMapVO;
606602
import com.cloud.dc.ClusterVO;
607603
import com.cloud.dc.DataCenterVO;
604+
import com.cloud.dc.DomainVlanMapVO;
608605
import com.cloud.dc.HostPodVO;
609606
import com.cloud.dc.Pod;
610607
import com.cloud.dc.PodVlanMapVO;
@@ -614,6 +611,7 @@
614611
import com.cloud.dc.dao.AccountVlanMapDao;
615612
import com.cloud.dc.dao.ClusterDao;
616613
import com.cloud.dc.dao.DataCenterDao;
614+
import com.cloud.dc.dao.DomainVlanMapDao;
617615
import com.cloud.dc.dao.HostPodDao;
618616
import com.cloud.dc.dao.PodVlanMapDao;
619617
import com.cloud.dc.dao.VlanDao;
@@ -663,9 +661,9 @@
663661
import com.cloud.network.dao.LoadBalancerVO;
664662
import com.cloud.network.dao.NetworkAccountDao;
665663
import com.cloud.network.dao.NetworkAccountVO;
664+
import com.cloud.network.dao.NetworkDao;
666665
import com.cloud.network.dao.NetworkDomainDao;
667666
import com.cloud.network.dao.NetworkDomainVO;
668-
import com.cloud.network.dao.NetworkDao;
669667
import com.cloud.network.dao.NetworkVO;
670668
import com.cloud.network.vpc.dao.VpcDao;
671669
import com.cloud.org.Cluster;
@@ -4459,7 +4457,14 @@ public Pair<List<? extends HypervisorCapabilities>, Integer> listHypervisorCapab
44594457
}
44604458

44614459
@Override
4462-
public HypervisorCapabilities updateHypervisorCapabilities(final Long id, final Long maxGuestsLimit, final Boolean securityGroupEnabled) {
4460+
public HypervisorCapabilities updateHypervisorCapabilities(UpdateHypervisorCapabilitiesCmd cmd) {
4461+
final Long id = cmd.getId();
4462+
final Boolean securityGroupEnabled = cmd.getSecurityGroupEnabled();
4463+
final Long maxGuestsLimit = cmd.getMaxGuestsLimit();
4464+
final Integer maxDataVolumesLimit = cmd.getMaxDataVolumesLimit();
4465+
final Boolean storageMotionSupported = cmd.getStorageMotionSupported();
4466+
final Integer maxHostsPerClusterLimit = cmd.getMaxHostsPerClusterLimit();
4467+
final Boolean vmSnapshotEnabled = cmd.getVmSnapshotEnabled();
44634468
HypervisorCapabilitiesVO hpvCapabilities = _hypervisorCapabilitiesDao.findById(id, true);
44644469

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

4471-
final boolean updateNeeded = maxGuestsLimit != null || securityGroupEnabled != null;
4476+
final boolean updateNeeded = securityGroupEnabled != null || maxGuestsLimit != null ||
4477+
maxDataVolumesLimit != null || storageMotionSupported != null || maxHostsPerClusterLimit != null ||
4478+
vmSnapshotEnabled != null;
44724479
if (!updateNeeded) {
44734480
return hpvCapabilities;
44744481
}
44754482

44764483
hpvCapabilities = _hypervisorCapabilitiesDao.createForUpdate(id);
44774484

4485+
if (securityGroupEnabled != null) {
4486+
hpvCapabilities.setSecurityGroupEnabled(securityGroupEnabled);
4487+
}
4488+
44784489
if (maxGuestsLimit != null) {
44794490
hpvCapabilities.setMaxGuestsLimit(maxGuestsLimit);
44804491
}
44814492

4482-
if (securityGroupEnabled != null) {
4483-
hpvCapabilities.setSecurityGroupEnabled(securityGroupEnabled);
4493+
if (maxDataVolumesLimit != null) {
4494+
hpvCapabilities.setMaxDataVolumesLimit(maxDataVolumesLimit);
4495+
}
4496+
4497+
if (storageMotionSupported != null) {
4498+
hpvCapabilities.setStorageMotionSupported(storageMotionSupported);
4499+
}
4500+
4501+
if (maxHostsPerClusterLimit != null) {
4502+
hpvCapabilities.setMaxHostsPerCluster(maxHostsPerClusterLimit);
4503+
}
4504+
4505+
if (vmSnapshotEnabled != null) {
4506+
hpvCapabilities.setVmSnapshotEnabled(vmSnapshotEnabled);
44844507
}
44854508

44864509
if (_hypervisorCapabilitiesDao.update(id, hpvCapabilities)) {

0 commit comments

Comments
 (0)