diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index 37b702e166af..a6c5bafbd510 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -41,6 +41,7 @@ import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserDataResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VpcResponse; @@ -151,6 +152,9 @@ public class ListVMsCmd extends BaseListRetrieveOnlyResourceCountCmd implements @Parameter(name = ApiConstants.USER_DATA, type = CommandType.BOOLEAN, description = "Whether to return the VMs' user data or not. By default, user data will not be returned.", since = "4.18.0.0") private Boolean showUserData; + @Parameter(name = ApiConstants.USER_DATA_ID, type = CommandType.UUID, entityType = UserDataResponse.class, required = false, description = "the instances by userdata", since = "4.20.1") + private Long userdataId; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -245,6 +249,10 @@ protected boolean isViewDetailsEmpty() { return CollectionUtils.isEmpty(viewDetails); } + public Long getUserdataId() { + return userdataId; + } + public EnumSet getDetails() throws InvalidParameterValueException { if (isViewDetailsEmpty()) { if (_queryService.ReturnVmStatsOnVmList.value()) { diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 16cbd5ebe1b1..0e99af41338a 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -1267,6 +1267,7 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { Long storageId = null; StoragePoolVO pool = null; Long userId = cmd.getUserId(); + Long userdataId = cmd.getUserdataId(); Map tags = cmd.getTags(); boolean isAdmin = false; @@ -1339,6 +1340,10 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { userVmSearchBuilder.and("templateId", userVmSearchBuilder.entity().getTemplateId(), Op.EQ); } + if (userdataId != null) { + userVmSearchBuilder.and("userdataId", userVmSearchBuilder.entity().getUserDataId(), Op.EQ); + } + if (hypervisor != null) { userVmSearchBuilder.and("hypervisorType", userVmSearchBuilder.entity().getHypervisorType(), Op.EQ); } @@ -1531,6 +1536,10 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { userVmSearchCriteria.setParameters("templateId", templateId); } + if (userdataId != null) { + userVmSearchCriteria.setParameters("userdataId", userdataId); + } + if (display != null) { userVmSearchCriteria.setParameters("display", display); } diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js index ba7b3d75eb82..0d5c8de6628e 100644 --- a/ui/src/config/section/compute.js +++ b/ui/src/config/section/compute.js @@ -919,7 +919,7 @@ export default { related: [{ name: 'vm', title: 'label.instances', - param: 'userdata' + param: 'userdataid' }], tabs: [ {