diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 663090b84a..d16f98458b 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -303,9 +303,26 @@ func (self *SNetwork) GetAllocatedNicCount() (*sNicCount, error) { return nil, errors.Wrapf(err, "GetNatGatewayIpsCount") } cnt.Total += cnt.NatNicCount + bmReusedCnt, err := self.GetBaremetalServerReusedCount() + if err != nil { + return nil, errors.Wrapf(err, "Get baremetal server resued count") + } + cnt.Total -= bmReusedCnt return cnt, nil } +func (self *SNetwork) GetBaremetalServerReusedCount() (int, error) { + guest := GuestManager.Query().SubQuery() + gn := GuestnetworkManager.Query().Equals("network_id", self.Id) + gn = gn.Join(guest, sqlchemy.Equals(gn.Field("guest_id"), guest.Field("id"))) + bmn := HostnetworkManager.Query().Equals("network_id", self.Id).SubQuery() + q := gn.Join(bmn, sqlchemy.AND( + sqlchemy.Equals(gn.Field("ip_addr"), bmn.Field("ip_addr")), + sqlchemy.Equals(guest.Field("host_id"), bmn.Field("baremetal_id")), + )) + return q.CountWithError() +} + /*验证elb network可用,并返回关联的region, zone,vpc, wire*/ func (self *SNetwork) ValidateElbNetwork(ipAddr net.IP) (*SCloudregion, *SZone, *SVpc, *SWire, error) { // 验证IP Address可用