From 382f62828701a3ab0220e94752426c35edb878b0 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 23 Sep 2020 15:48:56 +0800 Subject: [PATCH 1/2] elasticips: fix calling FilterByOwner --- pkg/compute/models/elasticips.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index 3657933d94..ddf67cc5ba 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -29,6 +29,7 @@ import ( "yunion.io/x/onecloud/pkg/apis" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/consts" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudcommon/db/quotas" @@ -1252,8 +1253,9 @@ func (manager *SElasticipManager) NewEipForVMOnHost(ctx context.Context, userCre hostq := HostManager.Query().SubQuery() wireq := WireManager.Query().SubQuery() hostwireq := HostwireManager.Query().SubQuery() + scope := policy.PolicyManager.AllowScope(userCred, consts.GetServiceType(), NetworkManager.KeywordPlural(), policy.PolicyActionList) q := NetworkManager.Query() - q = NetworkManager.FilterByOwner(q, userCred, NetworkManager.NamespaceScope()) + q = NetworkManager.FilterByOwner(q, userCred, scope) q = q.Join(wireq, sqlchemy.Equals(wireq.Field("id"), q.Field("wire_id"))) q = q.Join(hostwireq, sqlchemy.Equals(hostwireq.Field("wire_id"), wireq.Field("id"))) q = q.Join(hostq, sqlchemy.Equals(hostq.Field("id"), host.Id)) From 63c4818b8a8bcebdd8f3b0ac0e4d572cd7183e74 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 23 Sep 2020 16:21:43 +0800 Subject: [PATCH 2/2] elasticips: error when we have no usable eip network --- pkg/compute/models/elasticips.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index ddf67cc5ba..5551656819 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -1265,17 +1265,21 @@ func (manager *SElasticipManager) NewEipForVMOnHost(ctx context.Context, userCre return nil, errors.Wrapf(err, "fetch eip networks usable in host %s(%s)", host.Name, host.Id) } + var net *SNetwork for i := range nets { - net := &nets[i] + net = &nets[i] cnt, err := net.GetFreeAddressCount() if err != nil { continue } if cnt > 0 { - eip.NetworkId = net.Id break } } + if net == nil { + return nil, errors.Error("no usable eip network") + } + eip.NetworkId = net.Id } var err error