From 59dcb4260dfe264b4e34a4a523dd70b03a96c7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Thu, 1 Feb 2024 18:52:48 +0800 Subject: [PATCH] fix(region): ipv6 filter (#19411) --- pkg/apis/compute/vpcs_const.go | 3 +++ pkg/compute/models/guests.go | 2 ++ pkg/compute/models/vpcs.go | 4 ++++ pkg/mcclient/options/vpc.go | 2 ++ 4 files changed, 11 insertions(+) diff --git a/pkg/apis/compute/vpcs_const.go b/pkg/apis/compute/vpcs_const.go index b99d0e5a17..78928f1b01 100644 --- a/pkg/apis/compute/vpcs_const.go +++ b/pkg/apis/compute/vpcs_const.go @@ -80,6 +80,9 @@ type VpcListInput struct { // example: 192.168.222.0/24 CidrBlock []string `json:"cidr_block"` + // IPv6地址段 + CidrBlock6 []string `json:"cidr_block6"` + // enmu: eip, none ExternalAccessMode string `json:"external_access_mode"` diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 46eb1447b5..b54d9f4f49 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -425,6 +425,7 @@ func (manager *SGuestManager) ListItemFilter( conditions := []sqlchemy.ICondition{} for _, ipAddr := range query.IpAddrs { conditions = append(conditions, sqlchemy.Regexp(grpnets.Field("ip_addr"), ipAddr)) + conditions = append(conditions, sqlchemy.Regexp(grpnets.Field("ip6_addr"), ipAddr)) } vipq = vipq.Join(grpnets, sqlchemy.Equals(grpnets.Field("group_id"), vipq.Field("group_id"))).Filter( sqlchemy.OR(conditions...), @@ -444,6 +445,7 @@ func (manager *SGuestManager) ListItemFilter( conditions = []sqlchemy.ICondition{} for _, ipAddr := range query.IpAddrs { conditions = append(conditions, sqlchemy.Regexp(gnQ.Field("ip_addr"), ipAddr)) + conditions = append(conditions, sqlchemy.Regexp(gnQ.Field("ip6_addr"), ipAddr)) } gn := gnQ.Filter(sqlchemy.OR(conditions...)) diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 94bbdf4314..91ad4b5d2e 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -1315,6 +1315,10 @@ func (manager *SVpcManager) ListItemFilter( q = q.In("cidr_block", query.CidrBlock) } + if len(query.CidrBlock6) > 0 { + q = q.In("cidr_block6", query.CidrBlock6) + } + return q, nil } diff --git a/pkg/mcclient/options/vpc.go b/pkg/mcclient/options/vpc.go index a7e17b2fb8..55187e3e4b 100644 --- a/pkg/mcclient/options/vpc.go +++ b/pkg/mcclient/options/vpc.go @@ -32,6 +32,8 @@ type VpcListOptions struct { ZoneId string `help:"Filter by zone which has networks"` UsableForInterVpcNetworkId string `help:"Filter usable vpcs for inter vpc network"` OrderByWireCount string + CidrBlock string `help:"IPv4 cidr block"` + CidrBlock6 string `help:"IPv6 cidr block"` } func (opts *VpcListOptions) GetContextId() string {