diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index a12abb6b9aa..4334eedc620 100644 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -568,6 +568,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { sb.and("accountId", sb.entity().getAccountId(), Op.EQ); sb.and("domainId", sb.entity().getDomainId(), Op.EQ); sb.and("oneToOneNat", sb.entity().isOneToOneNat(), Op.EQ); + sb.and("id", sb.entity().getId(), Op.EQ); if (path != null) { //for domain admin we should show only subdomains information @@ -576,8 +577,18 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); } + if (vmId != null) { + SearchBuilder ipSearch = _ipAddressDao.createSearchBuilder(); + ipSearch.and("associatedWithVmId", ipSearch.entity().getAssociatedWithVmId(), Op.EQ); + sb.join("ipSearch", ipSearch, sb.entity().getSourceIpAddressId(), ipSearch.entity().getId(), JoinBuilder.JoinType.INNER); + } + SearchCriteria sc = sb.create(); + if (id != null) { + sc.setParameters("id", id); + } + if (ipId != null) { sc.setParameters("ip", ipId); } @@ -596,6 +607,10 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { sc.setJoinParameters("domainSearch", "path", path + "%"); } + if (vmId != null) { + sc.setJoinParameters("ipSearch", "associatedWithVmId", vmId); + } + return _forwardingDao.search(sc, filter); }