Merge pull request #3786 from rainzm/bugfix/guest_image_public

fix(region): Add public/private feature for Guest Image
This commit is contained in:
yunion-ci-robot
2019-11-21 00:01:24 +08:00
committed by GitHub
2 changed files with 84 additions and 3 deletions
+52 -3
View File
@@ -16,6 +16,7 @@ package shell
import (
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/modules"
@@ -165,8 +166,8 @@ func init() {
}
printObject(result)
return nil
},
)
})
R(&GuestImageOptions{}, "guest-image-mark-unprotected", "Mark image protected", func(s *mcclient.ClientSession,
args *GuestImageOptions) error {
@@ -178,7 +179,55 @@ func init() {
}
printObject(result)
return nil
},
})
type GuestImageOperationOptions struct {
ID []string `help:"Guest Image ID or Name"`
}
type GuestImagePublicOptions struct {
GuestImageOperationOptions
Scope string `help:"sharing scope" choices:"system|domain"`
ShareToProject []string `help:"Share to prject"`
}
R(&GuestImageOperationOptions{}, "guest-image-private", "Make a guest image private",
func(s *mcclient.ClientSession, args *GuestImageOperationOptions) error {
if len(args.ID) == 0 {
return errors.Error("No guest image ID provided")
} else if len(args.ID) == 1 {
result, err := modules.GuestImages.PerformAction(s, args.ID[0], "private", nil)
if err != nil {
return err
}
printObject(result)
} else {
results := modules.GuestImages.BatchPerformAction(s, args.ID, "private", nil)
printBatchResults(results, modules.GuestImages.GetColumns(s))
}
return nil
},
)
R(&GuestImagePublicOptions{}, "guest-image-public", "Make a guest image public",
func(s *mcclient.ClientSession, args *GuestImagePublicOptions) error {
params, err := options.StructToParams(args)
if err != nil {
return err
}
if len(args.ID) == 0 {
return errors.Error("No guest image ID provided")
} else if len(args.ID) == 1 {
result, err := modules.GuestImages.PerformAction(s, args.ID[0], "public", params)
if err != nil {
return err
}
printObject(result)
} else {
results := modules.GuestImages.BatchPerformAction(s, args.ID, "public", params)
printBatchResults(results, modules.GuestImages.GetColumns(s))
}
return nil
},
)
}
+32
View File
@@ -500,3 +500,35 @@ func (self *SGuestImageManager) CleanPendingDeleteImages(ctx context.Context, us
images[i].startDeleteTask(ctx, userCred, "", false, true)
}
}
func (self *SGuestImage) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential,
query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
images, err := GuestImageJointManager.GetImagesByGuestImageId(self.Id)
if err != nil {
return nil, errors.Wrap(err, "fail to fetch subimages of guest image")
}
for i := range images {
_, err := images[i].PerformPublic(ctx, userCred, query, data)
if err != nil {
return nil, errors.Wrapf(err, "fail to public subimage %s", images[i].GetId())
}
}
return self.SSharableVirtualResourceBase.PerformPublic(ctx, userCred, query, data)
}
func (self *SGuestImage) PerformPrivate(ctx context.Context, userCred mcclient.TokenCredential,
query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
images, err := GuestImageJointManager.GetImagesByGuestImageId(self.Id)
if err != nil {
return nil, errors.Wrap(err, "fail to fetch subimages of guest image")
}
for i := range images {
_, err := images[i].PerformPrivate(ctx, userCred, query, data)
if err != nil {
return nil, errors.Wrapf(err, "fail to private subimage %s", images[i].GetId())
}
}
return self.SSharableVirtualResourceBase.PerformPrivate(ctx, userCred, query, data)
}