Merge pull request #6463 from tb365/bugfix/tb-network-ip-query-fix

add fuzzy ip matching
This commit is contained in:
Zexi Li
2020-05-19 19:15:23 +08:00
committed by GitHub
2 changed files with 22 additions and 3 deletions
+5 -1
View File
@@ -72,10 +72,14 @@ type NetworkListInput struct {
UsableResourceListInput
// description: search ip address in network.
// description: Exact matching ip address in network.
// example: 10.168.222.1
Ip string `json:"ip"`
// description: Fuzzy matching ip address in network.
// example: 10.168.222.1
IpMatch string `json:"ip_match"`
IfnameHint []string `json:"ifname_hint"`
// 起始IP地址
GuestIpStart []string `json:"guest_ip_start"`
+17 -2
View File
@@ -1780,8 +1780,17 @@ func (manager *SNetworkManager) ListItemFilter(
}
}
ip := ""
exactIpMatch := false
if len(input.Ip) > 0 {
ipIa, err := parseIpToIntArray(input.Ip)
exactIpMatch = true
ip = input.Ip
} else if len(input.IpMatch) > 0 {
ip = input.IpMatch
}
if len(ip) > 0 {
ipIa, err := parseIpToIntArray(ip)
if err != nil {
return nil, err
}
@@ -1796,7 +1805,13 @@ func (manager *SNetworkManager) ListItemFilter(
ipStart := sqlchemy.INET_ATON(q.Field("guest_ip_start"))
ipEnd := sqlchemy.INET_ATON(q.Field("guest_ip_end"))
ipCondtion := sqlchemy.OR(sqlchemy.Between(ipField, ipStart, ipEnd), sqlchemy.Contains(q.Field("guest_ip_start"), input.Ip), sqlchemy.Contains(q.Field("guest_ip_end"), input.Ip))
var ipCondtion sqlchemy.ICondition
if exactIpMatch {
ipCondtion = sqlchemy.Between(ipField, ipStart, ipEnd)
} else {
ipCondtion = sqlchemy.OR(sqlchemy.Between(ipField, ipStart, ipEnd), sqlchemy.Contains(q.Field("guest_ip_start"), ip), sqlchemy.Contains(q.Field("guest_ip_end"), ip))
}
q = q.Filter(ipCondtion)
}