Skip to content

Commit

Permalink
rbd: add Volume interface
Browse files Browse the repository at this point in the history
The Volume interface will make it easier to work with the rbdImage
struct, as the functions are cleaner defined. This benefits work that is
needed for VolumeGroups and other CSI-Addons procedures.

Signed-off-by: Niels de Vos <ndevos@ibm.com>
  • Loading branch information
nixpanic committed Jul 5, 2024
1 parent be42cc2 commit 398cefd
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
9 changes: 9 additions & 0 deletions internal/rbd/rbd_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"strings"
"time"

types "github.com/ceph/ceph-csi/internal/rbd_types"
"github.com/ceph/ceph-csi/internal/util"
"github.com/ceph/ceph-csi/internal/util/log"

Expand Down Expand Up @@ -150,6 +151,9 @@ type rbdImage struct {
ParentInTrash bool
}

// check that rbdVolume implements the types.Volume interface.
var _ types.Volume = &rbdVolume{}

// rbdVolume represents a CSI volume and its RBD image specifics.
type rbdVolume struct {
rbdImage
Expand Down Expand Up @@ -418,6 +422,11 @@ func (rs *rbdSnapshot) String() string {
return fmt.Sprintf("%s/%s@%s", rs.Pool, rs.RbdImageName, rs.RbdSnapName)
}

// GetID returns the CSI volume handle of the image.
func (ri *rbdImage) GetID(ctx context.Context) (string, error) {
return ri.VolID, nil
}

// createImage creates a new ceph image with provision and volume options.
func createImage(ctx context.Context, pOpts *rbdVolume, cr *util.Credentials) error {
volSzMiB := fmt.Sprintf("%dM", util.RoundOffVolSize(pOpts.VolSize))
Expand Down
31 changes: 31 additions & 0 deletions internal/rbd_types/volume.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
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.
*/

//nolint:golint // this package should be renamed to rbd/types
package rbd_types

import (
"context"
)

type Volume interface {
// Destroy frees the resources used by the Volume.
Destroy(ctx context.Context)

Delete(ctx context.Context) error

GetID(ctx context.Context) (string, error)
}

0 comments on commit 398cefd

Please sign in to comment.