mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-18 02:50:30 +00:00
rbd: Implement create and delete snapshot with go-ceph
Implement create and delete snapshot with go-ceph Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
parent
6ba0cd58b9
commit
f08118a8e5
@ -754,39 +754,35 @@ func (rv *rbdVolume) hasSnapshotFeature() bool {
|
|||||||
return (uint64(rv.imageFeatureSet) & librbd.FeatureLayering) == librbd.FeatureLayering
|
return (uint64(rv.imageFeatureSet) & librbd.FeatureLayering) == librbd.FeatureLayering
|
||||||
}
|
}
|
||||||
|
|
||||||
func createSnapshot(ctx context.Context, pOpts *rbdSnapshot, cr *util.Credentials) error {
|
func (rv *rbdVolume) createSnapshot(ctx context.Context, pOpts *rbdSnapshot) error {
|
||||||
var output []byte
|
|
||||||
|
|
||||||
klog.V(4).Infof(util.Log(ctx, "rbd: snap create %s using mon %s"), pOpts, pOpts.Monitors)
|
klog.V(4).Infof(util.Log(ctx, "rbd: snap create %s using mon %s"), pOpts, pOpts.Monitors)
|
||||||
args := []string{"snap", "create", pOpts.String(), "--id", cr.ID, "-m", pOpts.Monitors, "--keyfile=" + cr.KeyFile}
|
image, err := rv.open()
|
||||||
|
|
||||||
output, err := execCommand("rbd", args)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to create snapshot, command output: %s", string(output))
|
return err
|
||||||
}
|
}
|
||||||
|
defer image.Close()
|
||||||
|
|
||||||
return nil
|
_, err = image.CreateSnapshot(pOpts.RbdSnapName)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteSnapshot(ctx context.Context, pOpts *rbdSnapshot, cr *util.Credentials) error {
|
func (rv *rbdVolume) deleteSnapshot(ctx context.Context, pOpts *rbdSnapshot) error {
|
||||||
var output []byte
|
|
||||||
|
|
||||||
klog.V(4).Infof(util.Log(ctx, "rbd: snap rm %s using mon %s"), pOpts, pOpts.Monitors)
|
klog.V(4).Infof(util.Log(ctx, "rbd: snap rm %s using mon %s"), pOpts, pOpts.Monitors)
|
||||||
args := []string{"snap", "rm", pOpts.String(), "--id", cr.ID, "-m", pOpts.Monitors, "--keyfile=" + cr.KeyFile}
|
image, err := rv.open()
|
||||||
|
|
||||||
output, err := execCommand("rbd", args)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to delete snapshot, command output: %s", string(output))
|
return err
|
||||||
}
|
}
|
||||||
|
defer image.Close()
|
||||||
|
|
||||||
if err := undoSnapReservation(ctx, pOpts, cr); err != nil {
|
snap := image.GetSnapshot(pOpts.RbdSnapName)
|
||||||
klog.Errorf(util.Log(ctx, "failed to remove reservation for snapname (%s) with backing snap (%s): %s"),
|
if snap == nil {
|
||||||
pOpts.RequestName, pOpts, err)
|
return errors.Errorf("snapshot value is nil for %s", pOpts.RbdSnapName)
|
||||||
}
|
}
|
||||||
|
err = snap.Remove()
|
||||||
return nil
|
if err == librbd.ErrNotFound {
|
||||||
|
return ErrSnapNotFound{snapName: pOpts.RbdSnapName, err: err}
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolint: interfacer
|
// nolint: interfacer
|
||||||
|
Loading…
Reference in New Issue
Block a user