Add support for rolling back snapshots
We supported creating snapshots, but not doing anything with them. This removes the manual task of restoring a snapshot and replace it with a PVC abstraction of rolling back to a snapshot. While Ceph recommends cloning a snapshot instead of rolling back, due to the time taken, in our usecase I don't think that is an optimal strategy, as it will leave dangling clones that we'd then have to manage. Closes #183
This commit is contained in:
@ -6362,6 +6362,59 @@ api.add_resource(
|
||||
)
|
||||
|
||||
|
||||
# /storage/ceph/snapshot/<pool>/<volume>/<snapshot>/rollback
|
||||
class API_Storage_Ceph_Snapshot_Rollback_Element(Resource):
|
||||
@Authenticator
|
||||
def post(self, pool, volume, snapshot):
|
||||
"""
|
||||
Roll back an RBD volume {volume} in pool {pool} to snapshot {snapshot}
|
||||
|
||||
WARNING: This action cannot be done on an active RBD volume. All IO MUST be stopped first.
|
||||
---
|
||||
tags:
|
||||
- storage / ceph
|
||||
parameters:
|
||||
- in: query
|
||||
name: snapshot
|
||||
type: string
|
||||
required: true
|
||||
description: The name of the snapshot
|
||||
- in: query
|
||||
name: volume
|
||||
type: string
|
||||
required: true
|
||||
description: The name of the volume
|
||||
- in: query
|
||||
name: pool
|
||||
type: integer
|
||||
required: true
|
||||
description: The name of the pool
|
||||
responses:
|
||||
200:
|
||||
description: OK
|
||||
schema:
|
||||
type: object
|
||||
id: Message
|
||||
404:
|
||||
description: Not found
|
||||
schema:
|
||||
type: object
|
||||
id: Message
|
||||
400:
|
||||
description: Bad request
|
||||
schema:
|
||||
type: object
|
||||
id: Message
|
||||
"""
|
||||
return api_helper.ceph_volume_snapshot_rollback(pool, volume, snapshot)
|
||||
|
||||
|
||||
api.add_resource(
|
||||
API_Storage_Ceph_Snapshot_Rollback_Element,
|
||||
"/storage/ceph/snapshot/<pool>/<volume>/<snapshot>/rollback",
|
||||
)
|
||||
|
||||
|
||||
##########################################################
|
||||
# Provisioner API
|
||||
##########################################################
|
||||
|
@ -2183,6 +2183,22 @@ def ceph_volume_snapshot_rename(zkhandler, pool, volume, name, new_name):
|
||||
return output, retcode
|
||||
|
||||
|
||||
@ZKConnection(config)
|
||||
def ceph_volume_snapshot_rollback(zkhandler, pool, volume, name):
|
||||
"""
|
||||
Roll back a Ceph RBD volume to a given snapshot in the PVC Ceph storage cluster.
|
||||
"""
|
||||
retflag, retdata = pvc_ceph.rollback_snapshot(zkhandler, pool, volume, name)
|
||||
|
||||
if retflag:
|
||||
retcode = 200
|
||||
else:
|
||||
retcode = 400
|
||||
|
||||
output = {"message": retdata.replace('"', "'")}
|
||||
return output, retcode
|
||||
|
||||
|
||||
@ZKConnection(config)
|
||||
def ceph_volume_snapshot_remove(zkhandler, pool, volume, name):
|
||||
"""
|
||||
|
Reference in New Issue
Block a user