MCPcopy
hub / github.com/lxc/incus / storagePoolBucketsPost

Function storagePoolBucketsPost

cmd/incusd/storage_buckets.go:640–720  ·  view source on GitHub ↗

swagger:operation POST /1.0/storage-pools/{poolName}/buckets storage storage_pool_bucket_post Add a storage pool bucket. Creates a new storage pool bucket. --- consumes: - application/json produces: - application/json parameters: - in: path name: poolName description: Sto

(d *Daemon, r *http.Request)

Source from the content-addressed store, hash-verified

638// "500":
639// $ref: "#/responses/InternalServerError"
640func storagePoolBucketsPost(d *Daemon, r *http.Request) response.Response {
641 s := d.State()
642
643 resp := forwardedResponseIfTargetIsRemote(s, r)
644 if resp != nil {
645 return resp
646 }
647
648 bucketProjectName, err := project.StorageBucketProject(r.Context(), s.DB.Cluster, request.ProjectParam(r))
649 if err != nil {
650 return response.SmartError(err)
651 }
652
653 poolName, err := pathVar(r, "poolName")
654 if err != nil {
655 return response.SmartError(err)
656 }
657
658 if r.Header.Get("Content-Type") == "application/octet-stream" {
659 return createStoragePoolBucketFromBackup(s, r, request.ProjectParam(r), bucketProjectName, r.Body, poolName, r.Header.Get("X-Incus-name"))
660 }
661
662 // Parse the request into a record.
663 req := api.StorageBucketsPost{}
664 err = json.NewDecoder(r.Body).Decode(&req)
665 if err != nil {
666 return response.BadRequest(err)
667 }
668
669 pool, err := storagePools.LoadByName(s, poolName)
670 if err != nil {
671 return response.SmartError(fmt.Errorf("Failed loading storage pool: %w", err))
672 }
673
674 // Quick checks.
675 err = validate.IsAPIName(req.Name, false)
676 if err != nil {
677 return response.BadRequest(fmt.Errorf("Invalid storage bucket name: %w", err))
678 }
679
680 reverter := revert.New()
681 defer reverter.Fail()
682
683 err = pool.CreateBucket(bucketProjectName, req, nil)
684 if err != nil {
685 return response.SmartError(fmt.Errorf("Failed creating storage bucket: %w", err))
686 }
687
688 reverter.Add(func() { _ = pool.DeleteBucket(bucketProjectName, req.Name, nil) })
689
690 // Create admin key for new bucket.
691 adminKeyReq := api.StorageBucketKeysPost{
692 StorageBucketKeyPut: api.StorageBucketKeyPut{
693 Role: "admin",
694 Description: "Admin user",
695 },
696 Name: "admin",
697 }

Callers

nothing calls this directly

Calls 15

StorageBucketProjectFunction · 0.92
ProjectParamFunction · 0.92
SmartErrorFunction · 0.92
BadRequestFunction · 0.92
IsAPINameFunction · 0.92
NewFunction · 0.92
ErrorFunction · 0.92
CreateRequestorFunction · 0.92
NewURLFunction · 0.92
SyncResponseLocationFunction · 0.92
pathVarFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…