lxd/storage_volumes.go
func storagePoolVolumesTypePost(d *Daemon, r *http.Request) Response {
	response := ForwardedResponseIfTargetIsRemote(d, r)
	if response != nil {
		return response
	}

	req := api.StorageVolumesPost{}

	// Parse the request.
	err := json.NewDecoder(r.Body).Decode(&req)
	if err != nil {
		return BadRequest(err)
	}

	// Sanity checks.
	if req.Name == "" {
		return BadRequest(fmt.Errorf("No name provided"))
	}

	if strings.Contains(req.Name, "/") {
		return BadRequest(fmt.Errorf("Storage volume names may not contain slashes"))
	}

	req.Type = mux.Vars(r)["type"]

	// We currently only allow to create storage volumes of type
	// storagePoolVolumeTypeCustom. So check, that nothing else was
	// requested.
	if req.Type != storagePoolVolumeTypeNameCustom {
		return BadRequest(fmt.Errorf(`Currently not allowed to create `+
			`storage volumes of type %s`, req.Type))
	}

	poolName := mux.Vars(r)["name"]

	switch req.Source.Type {
	case "":
		return doVolumeCreateOrCopy(d, poolName, &req)
	case "copy":
		return doVolumeCreateOrCopy(d, poolName, &req)
	case "migration":
		return doVolumeMigration(d, poolName, &req)
	default:
		return BadRequest(fmt.Errorf("unknown source type %s", req.Source.Type))
	}
}
func storagePoolVolumesTypePost(d *Daemon, r *http.Request) Response {
	response := ForwardedResponseIfTargetIsRemote(d, r)
	if response != nil {
		return response
	}

	req := api.StorageVolumesPost{}

	// Parse the request.
	err := json.NewDecoder(r.Body).Decode(&req)
	if err != nil {
		return BadRequest(err)
	}

	// Sanity checks.
	if req.Name == "" {
		return BadRequest(fmt.Errorf("No name provided"))
	}

	if strings.Contains(req.Name, "/") {
		return BadRequest(fmt.Errorf("Storage volume names may not contain slashes"))
	}

	req.Type = mux.Vars(r)["type"]

	// We currently only allow to create storage volumes of type
	// storagePoolVolumeTypeCustom. So check, that nothing else was
	// requested.
	if req.Type != storagePoolVolumeTypeNameCustom {
		return BadRequest(fmt.Errorf(`Currently not allowed to create `+
			`storage volumes of type %s`, req.Type))
	}

	poolName := mux.Vars(r)["name"]

	switch req.Source.Type {
	case "":
		return doVolumeCreateOrCopy(d, poolName, &req)
	case "copy":
		return doVolumeCreateOrCopy(d, poolName, &req)
	case "migration":
		return doVolumeMigration(d, poolName, &req)
	default:
		return BadRequest(fmt.Errorf("unknown source type %s", req.Source.Type))
	}
}
func storagePoolVolumesTypePost ( d * Daemon , r * http . Request ) Response { response := ForwardedResponseIfTargetIsRemote ( d , r ) if response != nil { return response } req := api . StorageVolumesPost { } // Parse the request. err := json . NewDecoder ( r . Body ) . Decode ( & req ) if err != nil { return BadRequest ( err ) } // Sanity checks. if req . Name == " " { return BadRequest ( fmt . Errorf ( " " ) ) } if strings . Contains ( req . Name , " " ) { return BadRequest ( fmt . Errorf ( " " ) ) } req . Type = mux . Vars ( r ) [ " " ] // We currently only allow to create storage volumes of type // storagePoolVolumeTypeCustom. So check, that nothing else was // requested. if req . Type != storagePoolVolumeTypeNameCustom { return BadRequest ( fmt . Errorf ( `Currently not allowed to create ` + `storage volumes of type %s` , req . Type ) ) } poolName := mux . Vars ( r ) [ " " ] switch req . Source . Type { case " " : return doVolumeCreateOrCopy ( d , poolName , & req ) case " " : return doVolumeCreateOrCopy ( d , poolName , & req ) case " " : return doVolumeMigration ( d , poolName , & req ) default : return BadRequest ( fmt . Errorf ( " " , req . Source . Type ) ) } }
// /1.0/storage-pools/{name}/volumes/{type}
// Create a storage volume in a given storage pool.
/ 1 . 0 / storage - pools / { name } / volumes / { type } Create a storage volume in a given storage pool .