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);
             }

Reply via email to