mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-01-17 18:29:30 +00:00
rbd: update Volume interface implementation for VolumeGroup APIs
Add support for adding and removing the RBD-image from a group. Signed-off-by: Niels de Vos <ndevos@ibm.com>
This commit is contained in:
parent
a98edab480
commit
fbf9ffcac4
@ -239,7 +239,7 @@ func (cs *ControllerServer) parseVolCreateRequest(
|
|||||||
return rbdVol, nil
|
return rbdVol, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rbdVol *rbdVolume) ToCSI(ctx context.Context) *csi.Volume {
|
func (rbdVol *rbdVolume) ToCSI(ctx context.Context) (*csi.Volume, error) {
|
||||||
vol := &csi.Volume{
|
vol := &csi.Volume{
|
||||||
VolumeId: rbdVol.VolID,
|
VolumeId: rbdVol.VolID,
|
||||||
CapacityBytes: rbdVol.VolSize,
|
CapacityBytes: rbdVol.VolSize,
|
||||||
@ -266,22 +266,29 @@ func (rbdVol *rbdVolume) ToCSI(ctx context.Context) *csi.Volume {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return vol
|
return vol, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildCreateVolumeResponse(
|
func buildCreateVolumeResponse(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *csi.CreateVolumeRequest,
|
req *csi.CreateVolumeRequest,
|
||||||
rbdVol *rbdVolume,
|
rbdVol *rbdVolume,
|
||||||
) *csi.CreateVolumeResponse {
|
) (*csi.CreateVolumeResponse, error) {
|
||||||
volume := rbdVol.ToCSI(ctx)
|
volume, err := rbdVol.ToCSI(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(
|
||||||
|
codes.Internal,
|
||||||
|
"BUG, can not happen: failed to convert volume %q to CSI type: %v",
|
||||||
|
rbdVol, err)
|
||||||
|
}
|
||||||
|
|
||||||
volume.ContentSource = req.GetVolumeContentSource()
|
volume.ContentSource = req.GetVolumeContentSource()
|
||||||
|
|
||||||
for param, value := range util.GetVolumeContext(req.GetParameters()) {
|
for param, value := range util.GetVolumeContext(req.GetParameters()) {
|
||||||
volume.VolumeContext[param] = value
|
volume.VolumeContext[param] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
return &csi.CreateVolumeResponse{Volume: volume}
|
return &csi.CreateVolumeResponse{Volume: volume}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getGRPCErrorForCreateVolume converts the returns the GRPC errors based on
|
// getGRPCErrorForCreateVolume converts the returns the GRPC errors based on
|
||||||
@ -424,7 +431,7 @@ func (cs *ControllerServer) CreateVolume(
|
|||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return buildCreateVolumeResponse(ctx, req, rbdVol), nil
|
return buildCreateVolumeResponse(ctx, req, rbdVol)
|
||||||
}
|
}
|
||||||
|
|
||||||
// flattenParentImage is to be called before proceeding with creating volume,
|
// flattenParentImage is to be called before proceeding with creating volume,
|
||||||
@ -559,7 +566,7 @@ func (cs *ControllerServer) repairExistingVolume(ctx context.Context, req *csi.C
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return buildCreateVolumeResponse(ctx, req, rbdVol), nil
|
return buildCreateVolumeResponse(ctx, req, rbdVol)
|
||||||
}
|
}
|
||||||
|
|
||||||
// check snapshots on the rbd image, as we have limit from krbd that an image
|
// check snapshots on the rbd image, as we have limit from krbd that an image
|
||||||
|
58
internal/rbd/group.go
Normal file
58
internal/rbd/group.go
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2024 The Ceph-CSI Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package rbd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
librbd "github.com/ceph/go-ceph/rbd"
|
||||||
|
|
||||||
|
"github.com/ceph/ceph-csi/internal/rbd/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AddToGroup adds the image to the group. This is called from the rbd_group
|
||||||
|
// package.
|
||||||
|
func (rv *rbdVolume) AddToGroup(ctx context.Context, vg types.VolumeGroup) error {
|
||||||
|
ioctx, err := vg.GetIOContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not get iocontext for volume group %q: %w", vg, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
name, err := vg.GetName(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not get name for volume group %q: %w", vg, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return librbd.GroupImageAdd(ioctx, name, rv.ioctx, rv.RbdImageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveFromGroup removes the image from the group. This is called from the
|
||||||
|
// rbd_group package.
|
||||||
|
func (rv *rbdVolume) RemoveFromGroup(ctx context.Context, vg types.VolumeGroup) error {
|
||||||
|
ioctx, err := vg.GetIOContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not get iocontext for volume group %q: %w", vg, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
name, err := vg.GetName(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not get name for volume group %q: %w", vg, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return librbd.GroupImageRemove(ioctx, name, rv.ioctx, rv.RbdImageName)
|
||||||
|
}
|
@ -33,5 +33,11 @@ type Volume interface {
|
|||||||
GetID(ctx context.Context) (string, error)
|
GetID(ctx context.Context) (string, error)
|
||||||
|
|
||||||
// ToCSI creates a CSI protocol formatted struct of the volume.
|
// ToCSI creates a CSI protocol formatted struct of the volume.
|
||||||
ToCSI(ctx context.Context) *csi.Volume
|
ToCSI(ctx context.Context) (*csi.Volume, error)
|
||||||
|
|
||||||
|
// AddToGroup adds the Volume to the VolumeGroup.
|
||||||
|
AddToGroup(ctx context.Context, vg VolumeGroup) error
|
||||||
|
|
||||||
|
// RemoveFromGroup removes the Volume from the VolumeGroup.
|
||||||
|
RemoveFromGroup(ctx context.Context, vg VolumeGroup) error
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user