swagger:operation POST /1.0/storage-pools/{poolName}/buckets/{bucketName}/backups/{backupName} storage storage_pool_buckets_backup_post Rename a storage bucket backup Renames a storage bucket backup. --- consumes: - application/json produces: - application/json parameters: - in: pa
(d *Daemon, r *http.Request)
| 651 | // "500": |
| 652 | // $ref: "#/responses/InternalServerError" |
| 653 | func storagePoolBucketBackupPost(d *Daemon, r *http.Request) response.Response { |
| 654 | s := d.State() |
| 655 | |
| 656 | resp := forwardedResponseIfTargetIsRemote(s, r) |
| 657 | if resp != nil { |
| 658 | return resp |
| 659 | } |
| 660 | |
| 661 | projectName, err := project.StorageBucketProject(r.Context(), s.DB.Cluster, request.ProjectParam(r)) |
| 662 | if err != nil { |
| 663 | return response.SmartError(err) |
| 664 | } |
| 665 | |
| 666 | poolName, err := pathVar(r, "poolName") |
| 667 | if err != nil { |
| 668 | return response.SmartError(err) |
| 669 | } |
| 670 | |
| 671 | pool, err := storagePools.LoadByName(s, poolName) |
| 672 | if err != nil { |
| 673 | return response.SmartError(fmt.Errorf("Failed loading storage pool: %w", err)) |
| 674 | } |
| 675 | |
| 676 | if !pool.Driver().Info().Buckets { |
| 677 | return response.BadRequest(errors.New("Storage pool does not support buckets")) |
| 678 | } |
| 679 | |
| 680 | bucketName, err := pathVar(r, "bucketName") |
| 681 | if err != nil { |
| 682 | return response.SmartError(err) |
| 683 | } |
| 684 | |
| 685 | backupName, err := pathVar(r, "backupName") |
| 686 | if err != nil { |
| 687 | return response.SmartError(err) |
| 688 | } |
| 689 | |
| 690 | req := api.StorageBucketBackupPost{} |
| 691 | err = json.NewDecoder(r.Body).Decode(&req) |
| 692 | if err != nil { |
| 693 | return response.BadRequest(err) |
| 694 | } |
| 695 | |
| 696 | // Quick checks. |
| 697 | err = validate.IsAPIName(req.Name, false) |
| 698 | if err != nil { |
| 699 | return response.BadRequest(fmt.Errorf("Invalid storage bucket backup name: %w", err)) |
| 700 | } |
| 701 | |
| 702 | oldName := bucketName + internalInstance.SnapshotDelimiter + backupName |
| 703 | |
| 704 | entry, err := storagePoolBucketBackupLoadByName(r.Context(), s, projectName, poolName, oldName) |
| 705 | if err != nil { |
| 706 | return response.SmartError(err) |
| 707 | } |
| 708 | |
| 709 | newName := bucketName + internalInstance.SnapshotDelimiter + req.Name |
| 710 |
nothing calls this directly
no test coverage detected
searching dependent graphs…