This is an automated email from the ASF dual-hosted git repository.
weizhou pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new 017cf2c367f Filter list VMs by IP address (#9547)
017cf2c367f is described below
commit 017cf2c367ffdf84f58a077a728343079bc40d9e
Author: Pearl Dsilva <[email protected]>
AuthorDate: Tue Oct 8 12:04:54 2024 -0400
Filter list VMs by IP address (#9547)
---
.../java/com/cloud/utils/db/GenericDaoBase.java | 42 +++++++++++++++-------
.../java/com/cloud/api/query/QueryManagerImpl.java | 24 +++++++++++++
2 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
index 3b950e1983d..9b26ebf7f95 100644
--- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
+++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
@@ -421,7 +421,6 @@ public abstract class GenericDaoBase<T, ID extends
Serializable> extends Compone
pstmt.setObject(i++, value);
}
}
-
if (s_logger.isDebugEnabled() && lock != null) {
txn.registerLock(pstmt.toString());
}
@@ -1342,22 +1341,39 @@ public abstract class GenericDaoBase<T, ID extends
Serializable> extends Compone
onClause.append("?");
joinAttrList.add(join.getFirstAttributes()[i]);
} else {
-
onClause.append(joinedTableNames.getOrDefault(join.getFirstAttributes()[i].table,
join.getFirstAttributes()[i].table))
- .append(".")
- .append(join.getFirstAttributes()[i].columnName);
+ if ((join.getFirstAttributes()[i].table == null &&
join.getFirstAttributes()[i].value == null) ||
+ (join.getSecondAttribute()[i].table == null &&
join.getSecondAttribute()[i].value == null)) {
+
onClause.append(joinedTableNames.getOrDefault(join.getSecondAttribute()[i].table,
join.getFirstAttributes()[i].table))
+ .append(".");
+ if (join.getFirstAttributes()[i].table == null &&
join.getFirstAttributes()[i].value == null) {
+
onClause.append(join.getSecondAttribute()[i].columnName);
+ } else {
+
onClause.append(join.getFirstAttributes()[i].columnName);
+ }
+
+ } else {
+
onClause.append(joinedTableNames.getOrDefault(join.getFirstAttributes()[i].table,
join.getFirstAttributes()[i].table))
+ .append(".")
+
.append(join.getFirstAttributes()[i].columnName);
+ }
}
- onClause.append("=");
- if (join.getSecondAttribute()[i].getValue() != null) {
- onClause.append("?");
- joinAttrList.add(join.getSecondAttribute()[i]);
+ if ((join.getFirstAttributes()[i].table == null &&
join.getFirstAttributes()[i].value == null) ||
+ (join.getSecondAttribute()[i].table == null &&
join.getSecondAttribute()[i].value == null)) {
+ onClause.append(" IS NULL");
} else {
- if(!joinTableAlias.equals(joinTableName)) {
- onClause.append(joinTableAlias);
+ onClause.append("=");
+ if (join.getSecondAttribute()[i].getValue() != null) {
+ onClause.append("?");
+ joinAttrList.add(join.getSecondAttribute()[i]);
} else {
- onClause.append(joinTableName);
+ if (!joinTableAlias.equals(joinTableName)) {
+ onClause.append(joinTableAlias);
+ } else {
+ onClause.append(joinTableName);
+ }
+ onClause.append(".")
+
.append(join.getSecondAttribute()[i].columnName);
}
- onClause.append(".")
- .append(join.getSecondAttribute()[i].columnName);
}
}
onClause.append(" ");
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 dce1978f4b9..a702e92e0bd 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -34,6 +34,8 @@ import java.util.stream.Stream;
import javax.inject.Inject;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolHostVO;
import com.cloud.event.EventVO;
@@ -549,6 +551,9 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
@Inject
private NetworkDao networkDao;
+ @Inject
+ private IPAddressDao ipAddressDao;
+
@Inject
private NicDao nicDao;
@@ -1453,6 +1458,22 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
if (isRootAdmin) {
userVmSearchBuilder.or("keywordInstanceName",
userVmSearchBuilder.entity().getInstanceName(), Op.LIKE );
}
+
+ SearchBuilder<IPAddressVO> ipAddressSearch =
ipAddressDao.createSearchBuilder();
+ userVmSearchBuilder.join("ipAddressSearch", ipAddressSearch,
+ ipAddressSearch.entity().getAssociatedWithVmId(),
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.LEFT);
+
+ SearchBuilder<NicVO> nicSearch = nicDao.createSearchBuilder();
+ userVmSearchBuilder.join("nicSearch", nicSearch,
JoinBuilder.JoinType.LEFT,
+ JoinBuilder.JoinCondition.AND,
+ nicSearch.entity().getInstanceId(),
userVmSearchBuilder.entity().getId(),
+ nicSearch.entity().getRemoved(),
userVmSearchBuilder.entity().setLong(null));
+
+ userVmSearchBuilder.or("ipAddressSearch",
"keywordPublicIpAddress", ipAddressSearch.entity().getAddress(), Op.LIKE);
+
+ userVmSearchBuilder.or("nicSearch", "keywordIpAddress",
nicSearch.entity().getIPv4Address(), Op.LIKE);
+ userVmSearchBuilder.or("nicSearch", "keywordIp6Address",
nicSearch.entity().getIPv6Address(), Op.LIKE);
+
userVmSearchBuilder.cp();
}
@@ -1546,6 +1567,9 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
userVmSearchCriteria.setParameters("keywordDisplayName",
keywordMatch);
userVmSearchCriteria.setParameters("keywordName", keywordMatch);
userVmSearchCriteria.setParameters("keywordState", keyword);
+ userVmSearchCriteria.setParameters("keywordIpAddress",
keywordMatch);
+ userVmSearchCriteria.setParameters("keywordPublicIpAddress",
keywordMatch);
+ userVmSearchCriteria.setParameters("keywordIp6Address",
keywordMatch);
if (isRootAdmin) {
userVmSearchCriteria.setParameters("keywordInstanceName",
keywordMatch);
}