mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #3786 from rainzm/bugfix/guest_image_public
fix(region): Add public/private feature for Guest Image
This commit is contained in:
@@ -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
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user