diff --git a/pkg/apis/image/guestimage.go b/pkg/apis/image/guestimage.go index 6321d328b7..bad45a933d 100644 --- a/pkg/apis/image/guestimage.go +++ b/pkg/apis/image/guestimage.go @@ -26,8 +26,6 @@ type GuestImageDetails struct { apis.SharableVirtualResourceDetails SGuestImage - ImageIds []string `json:"image_ids"` - //Status string `json:"status"` Size int64 `json:"size"` MinRamMb int32 `json:"min_ram_mb"` diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index d6dd67756d..8181c50f03 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -260,19 +260,26 @@ func (self *SGuest) PerformSaveGuestImage(ctx context.Context, userCred mcclient if err != nil { return nil, err } - imageIds, err := ret.Get("image_ids") - if err != nil { - return nil, fmt.Errorf("something wrong in glance") - } - tmp := imageIds.(*jsonutils.JSONArray) - if tmp.Length() != len(disks.Data)+1 { + guestImageInfo := struct { + RootImage imageapi.SubImageInfo + DataImages []imageapi.SubImageInfo + }{} + ret.Unmarshal(&guestImageInfo) + + if len(guestImageInfo.DataImages) != len(disks.Data) { return nil, fmt.Errorf("create subimage of guest image error") } + imageIds := make([]string, 0, len(guestImageInfo.DataImages)+1) + for _, info := range guestImageInfo.DataImages { + imageIds = append(imageIds, info.ID) + } + imageIds = append(imageIds, guestImageInfo.RootImage.ID) taskParams := jsonutils.NewDict() if restart, _ := kwargs.Bool("auto_start"); restart { taskParams.Add(jsonutils.JSONTrue, "auto_start") } - taskParams.Add(imageIds, "image_ids") + taskParams.Add(jsonutils.Marshal(imageIds), "image_ids") + log.Infof("before StartGuestSaveGuestImage image_ids: %s", imageIds) return nil, self.StartGuestSaveGuestImage(ctx, userCred, taskParams, "") } diff --git a/pkg/image/models/image_guest.go b/pkg/image/models/image_guest.go index 0d8b9c5855..66eeef3eb4 100644 --- a/pkg/image/models/image_guest.go +++ b/pkg/image/models/image_guest.go @@ -291,7 +291,6 @@ func (self *SGuestImage) getMoreDetails(ctx context.Context, userCred mcclient.T var rootImage api.SubImageInfo for i := range images { image := images[i] - out.ImageIds = append(out.ImageIds, image.Id) size += image.Size if !image.IsData.IsTrue() { rootImage = api.SubImageInfo{