diff --git a/pkg/compute/tasks/container/container_save_volume_mount_image_task.go b/pkg/compute/tasks/container/container_save_volume_mount_image_task.go index 3d5351d33d..8af28a57e1 100644 --- a/pkg/compute/tasks/container/container_save_volume_mount_image_task.go +++ b/pkg/compute/tasks/container/container_save_volume_mount_image_task.go @@ -18,11 +18,18 @@ import ( "context" "yunion.io/x/jsonutils" + "yunion.io/x/log" + "yunion.io/x/onecloud/pkg/apis" api "yunion.io/x/onecloud/pkg/apis/compute" + hostapi "yunion.io/x/onecloud/pkg/apis/host" + imageapi "yunion.io/x/onecloud/pkg/apis/image" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/compute/options" + "yunion.io/x/onecloud/pkg/mcclient/auth" + "yunion.io/x/onecloud/pkg/mcclient/modules/image" ) func init() { @@ -51,7 +58,19 @@ func (t *ContainerSaveVolumeMountImageTask) OnImageSaved(ctx context.Context, co } func (t *ContainerSaveVolumeMountImageTask) OnImageSavedFailed(ctx context.Context, container *models.SContainer, reason jsonutils.JSONObject) { + input := &hostapi.ContainerSaveVolumeMountToImageInput{} + t.GetParams().Unmarshal(input) container.SetStatus(ctx, t.GetUserCred(), api.CONTAINER_STATUS_SAVE_IMAGE_FAILED, reason.String()) + if input.ImageId != "" { + s := auth.GetSession(ctx, t.GetUserCred(), options.Options.Region) + imgStatus := apis.PerformStatusInput{ + Status: imageapi.IMAGE_STATUS_SAVE_FAIL, + Reason: reason.String(), + } + if _, err := image.Images.PerformAction(s, input.ImageId, "status", jsonutils.Marshal(imgStatus)); err != nil { + log.Warningf("update image %s status failed: %v", input.ImageId, err) + } + } t.SetStageFailed(ctx, reason) } diff --git a/pkg/hostman/guestman/pod.go b/pkg/hostman/guestman/pod.go index dc22136356..30e318bda1 100644 --- a/pkg/hostman/guestman/pod.go +++ b/pkg/hostman/guestman/pod.go @@ -2430,7 +2430,10 @@ func (s *sPodGuestInstance) tarGzDir(input *hostapi.ContainerSaveVolumeMountToIm outputFp := filepath.Join(s.GetVolumesDir(), fp) dirPath := "." if len(input.VolumeMountDirs) != 0 { - dirPath = strings.Join(input.VolumeMountDirs, " ") + dirPath = "" + for _, vd := range input.VolumeMountDirs { + dirPath = fmt.Sprintf("%s '%s'", dirPath, vd) + } } // 计算总字节数,兼容多个目录/文件