diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index c1135226bbbc..c7e466d16ee2 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -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" @@ -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 @@ -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)) diff --git a/internal/rbd_types/volume.go b/internal/rbd_types/volume.go new file mode 100644 index 000000000000..85a3443c9e4b --- /dev/null +++ b/internal/rbd_types/volume.go @@ -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) +}