| 321 | } |
| 322 | |
| 323 | func (u *ImageService) ImageLoad(req dto.ImageLoad) error { |
| 324 | taskItem, err := task.NewTaskWithOps(strings.Join(req.Paths, ","), task.TaskImport, task.TaskScopeImage, req.TaskID, 1) |
| 325 | if err != nil { |
| 326 | return fmt.Errorf("new task for image import failed, err: %v", err) |
| 327 | } |
| 328 | |
| 329 | go func() { |
| 330 | client, err := docker.NewDockerClient() |
| 331 | if err != nil { |
| 332 | taskItem.Log("Failed to create Docker client: " + err.Error()) |
| 333 | return |
| 334 | } |
| 335 | defer client.Close() |
| 336 | |
| 337 | for _, itemPath := range req.Paths { |
| 338 | currentPath := itemPath |
| 339 | itemName := path.Base(currentPath) |
| 340 | taskItem.AddSubTask(i18n.GetWithName("TaskImport", itemName), func(t *task.Task) error { |
| 341 | taskItem.Logf("----------------- %s -----------------", itemName) |
| 342 | file, err := os.Open(currentPath) |
| 343 | if err != nil { |
| 344 | return err |
| 345 | } |
| 346 | defer file.Close() |
| 347 | res, err := client.ImageLoad(context.TODO(), file) |
| 348 | if err != nil { |
| 349 | return err |
| 350 | } |
| 351 | defer res.Body.Close() |
| 352 | content, err := io.ReadAll(res.Body) |
| 353 | if err != nil { |
| 354 | return err |
| 355 | } |
| 356 | if strings.Contains(string(content), "Error") { |
| 357 | return errors.New(string(content)) |
| 358 | } |
| 359 | return nil |
| 360 | }, nil) |
| 361 | } |
| 362 | _ = taskItem.Execute() |
| 363 | }() |
| 364 | return nil |
| 365 | } |
| 366 | |
| 367 | func (u *ImageService) ImageSave(req dto.ImageSave) error { |
| 368 | taskItem, err := task.NewTaskWithOps(req.Name, task.TaskExport, task.TaskScopeImage, req.TaskID, 1) |