From 5824b7add02fc3545244b501a1eaf821e085d08e Mon Sep 17 00:00:00 2001 From: rainzm Date: Fri, 23 Oct 2020 17:46:49 +0800 Subject: [PATCH] fix(glance): allow public and private operations of guestimage The public and private operations of the guest image depends on these operations of the subimage. --- pkg/image/models/image_guest.go | 4 ++-- pkg/image/models/images.go | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/pkg/image/models/image_guest.go b/pkg/image/models/image_guest.go index 1e8754d758..9bf5eb63c1 100644 --- a/pkg/image/models/image_guest.go +++ b/pkg/image/models/image_guest.go @@ -541,7 +541,7 @@ func (self *SGuestImage) PerformPublic( return nil, errors.Wrap(err, "fail to fetch subimages of guest image") } for i := range images { - _, err := images[i].PerformPublic(ctx, userCred, query, input) + _, err := images[i].performPublic(ctx, userCred, query, input) if err != nil { return nil, errors.Wrapf(err, "fail to public subimage %s", images[i].GetId()) } @@ -560,7 +560,7 @@ func (self *SGuestImage) PerformPrivate( return nil, errors.Wrap(err, "fail to fetch subimages of guest image") } for i := range images { - _, err := images[i].PerformPrivate(ctx, userCred, query, input) + _, err := images[i].performPrivate(ctx, userCred, query, input) if err != nil { return nil, errors.Wrapf(err, "fail to private subimage %s", images[i].GetId()) } diff --git a/pkg/image/models/images.go b/pkg/image/models/images.go index 3b19087c6d..98b0ceb601 100644 --- a/pkg/image/models/images.go +++ b/pkg/image/models/images.go @@ -1476,21 +1476,29 @@ func (img *SImage) PerformUpdateStatus(ctx context.Context, userCred mcclient.To } func (img *SImage) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicProjectInput) (jsonutils.JSONObject, error) { - if img.IsStandard.IsTrue() { - return nil, errors.Wrap(httperrors.ErrForbidden, "cannot perform public for standard image") - } if img.IsGuestImage.IsTrue() { return nil, errors.Wrap(httperrors.ErrForbidden, "cannot perform public for guest image") } + return img.performPublic(ctx, userCred, query, input) +} + +func (img *SImage) performPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicProjectInput) (jsonutils.JSONObject, error) { + if img.IsStandard.IsTrue() { + return nil, errors.Wrap(httperrors.ErrForbidden, "cannot perform public for standard image") + } return img.SSharableVirtualResourceBase.PerformPublic(ctx, userCred, query, input) } -func (img *SImage) PerformPrivate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPrivateInput) (jsonutils.JSONObject, error) { +func (img *SImage) performPrivate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPrivateInput) (jsonutils.JSONObject, error) { if img.IsStandard.IsTrue() { return nil, errors.Wrap(httperrors.ErrForbidden, "cannot perform private for standard image") } + return img.SSharableVirtualResourceBase.PerformPrivate(ctx, userCred, query, input) +} + +func (img *SImage) PerformPrivate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPrivateInput) (jsonutils.JSONObject, error) { if img.IsGuestImage.IsTrue() { return nil, errors.Wrap(httperrors.ErrForbidden, "cannot perform private for guest image") } - return img.SSharableVirtualResourceBase.PerformPrivate(ctx, userCred, query, input) + return img.performPrivate(ctx, userCred, query, input) }