Skip to content

Commit 55bcfaf

Browse files
author
Mice Xia
committed
CLOUDSTACK-88 Cannot listVM by vpcId which is required by VPC UI
1 parent 25e99e9 commit 55bcfaf

4 files changed

Lines changed: 34 additions & 2 deletions

File tree

api/src/com/cloud/api/commands/ListVMsCmd.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
9696
@Parameter(name=ApiConstants.ISO_ID, type=CommandType.LONG, description="list vms by iso")
9797
private Long isoId;
9898

99+
@IdentityMapper(entityTableName="vpc")
100+
@Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list vms by vpc")
101+
private Long vpcId;
99102
/////////////////////////////////////////////////////
100103
/////////////////// Accessors ///////////////////////
101104
/////////////////////////////////////////////////////
@@ -156,6 +159,10 @@ public Long getIsoId() {
156159
return isoId;
157160
}
158161

162+
public Long getVpcId(){
163+
return vpcId;
164+
}
165+
159166
public EnumSet<VMDetails> getDetails() throws InvalidParameterValueException {
160167
EnumSet<VMDetails> dv;
161168
if (viewDetails==null || viewDetails.size() <=0){

server/src/com/cloud/server/Criteria.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public class Criteria {
8181
public static final String STORAGE_ID="storageid";
8282
public static final String TEMPLATE_ID = "templateid";
8383
public static final String ISO_ID = "isoid";
84+
public static final String VPC_ID = "vpcId";
8485

8586
public Criteria(String orderBy, Boolean ascending, Long offset, Long limit) {
8687
this.offset = offset;

server/src/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@
141141
import com.cloud.network.security.dao.SecurityGroupDao;
142142
import com.cloud.network.security.dao.SecurityGroupVMMapDao;
143143
import com.cloud.network.vpc.VpcManager;
144+
import com.cloud.network.vpc.VpcVO;
145+
import com.cloud.network.vpc.dao.VpcDao;
144146
import com.cloud.offering.NetworkOffering;
145147
import com.cloud.offering.NetworkOffering.Availability;
146148
import com.cloud.offering.ServiceOffering;
@@ -319,6 +321,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
319321
@Inject
320322
protected NicDao _nicDao;
321323
@Inject
324+
protected VpcDao _vpcDao;
325+
@Inject
322326
protected RulesManager _rulesMgr;
323327
@Inject
324328
protected LoadBalancingRulesManager _lbMgr;
@@ -3012,6 +3016,7 @@ public List<UserVmVO> searchForUserVMs(ListVMsCmd cmd) {
30123016
c.addCriteria(Criteria.NETWORKID, cmd.getNetworkId());
30133017
c.addCriteria(Criteria.TEMPLATE_ID, cmd.getTemplateId());
30143018
c.addCriteria(Criteria.ISO_ID, cmd.getIsoId());
3019+
c.addCriteria(Criteria.VPC_ID, cmd.getVpcId());
30153020

30163021
if (domainId != null) {
30173022
c.addCriteria(Criteria.DOMAINID, domainId);
@@ -3063,6 +3068,7 @@ public List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId
30633068
Object storageId = c.getCriteria(Criteria.STORAGE_ID);
30643069
Object templateId = c.getCriteria(Criteria.TEMPLATE_ID);
30653070
Object isoId = c.getCriteria(Criteria.ISO_ID);
3071+
Object vpcId = c.getCriteria(Criteria.VPC_ID);
30663072

30673073
sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE);
30683074
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
@@ -3110,6 +3116,19 @@ public List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId
31103116

31113117
sb.join("nicSearch", nicSearch, sb.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
31123118
}
3119+
3120+
if(vpcId != null && networkId == null){
3121+
SearchBuilder<NicVO> nicSearch = _nicDao.createSearchBuilder();
3122+
3123+
SearchBuilder<NetworkVO> networkSearch = _networkDao.createSearchBuilder();
3124+
nicSearch.join("networkSearch", networkSearch, nicSearch.entity().getNetworkId(), networkSearch.entity().getId(), JoinBuilder.JoinType.INNER);
3125+
3126+
SearchBuilder<VpcVO> vpcSearch = _vpcDao.createSearchBuilder();
3127+
vpcSearch.and("vpcId", vpcSearch.entity().getId(), SearchCriteria.Op.EQ);
3128+
networkSearch.join("vpcSearch", vpcSearch, networkSearch.entity().getVpcId(), vpcSearch.entity().getId(), JoinBuilder.JoinType.INNER);
3129+
3130+
sb.join("nicSearch", nicSearch, sb.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
3131+
}
31133132

31143133
if (storageId != null) {
31153134
SearchBuilder<VolumeVO> volumeSearch = _volsDao.createSearchBuilder();
@@ -3162,6 +3181,10 @@ public List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId
31623181
if (networkId != null) {
31633182
sc.setJoinParameters("nicSearch", "networkId", networkId);
31643183
}
3184+
3185+
if(vpcId != null && networkId == null){
3186+
sc.setJoinParameters("vpcSearch", "vpcId", vpcId);
3187+
}
31653188

31663189
if (name != null) {
31673190
sc.setParameters("name", "%" + name + "%");

utils/src/com/cloud/utils/db/SearchCriteria.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,10 @@ protected JoinBuilder<SearchCriteria<?>> findJoin(Map<String, JoinBuilder<Search
223223
return jb;
224224
}
225225

226-
for (JoinBuilder<SearchCriteria<?>> j2 : _joins.values()) {
226+
for (JoinBuilder<SearchCriteria<?>> j2 : jbmap.values()) {
227227
SearchCriteria<?> sc = j2.getT();
228-
jb = findJoin(sc._joins, joinName);
228+
if(sc._joins != null)
229+
jb = findJoin(sc._joins, joinName);
229230
if (jb != null) {
230231
return jb;
231232
}

0 commit comments

Comments
 (0)