]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/volumes/fs/operations/subvolume.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / pybind / mgr / volumes / fs / operations / subvolume.py
CommitLineData
92f5a8d4
TL
1from contextlib import contextmanager
2
adb31ebb 3from .template import SubvolumeOpType
92f5a8d4
TL
4
5from .versions import loaded_subvolumes
6
cd265ab1 7def create_subvol(mgr, fs, vol_spec, group, subvolname, size, isolate_nspace, pool, mode, uid, gid):
92f5a8d4
TL
8 """
9 create a subvolume (create a subvolume with the max known version).
10
11 :param fs: ceph filesystem handle
12 :param vol_spec: volume specification
13 :param group: group object for the subvolume
14 :param size: In bytes, or None for no size limit
15 :param isolate_nspace: If true, use separate RADOS namespace for this subvolume
16 :param pool: the RADOS pool where the data objects of the subvolumes will be stored
17 :param mode: the user permissions
18 :param uid: the user identifier
19 :param gid: the group identifier
20 :return: None
21 """
cd265ab1 22 subvolume = loaded_subvolumes.get_subvolume_object_max(mgr, fs, vol_spec, group, subvolname)
92f5a8d4
TL
23 subvolume.create(size, isolate_nspace, pool, mode, uid, gid)
24
20effc67 25
cd265ab1 26def create_clone(mgr, fs, vol_spec, group, subvolname, pool, source_volume, source_subvolume, snapname):
92f5a8d4
TL
27 """
28 create a cloned subvolume.
29
30 :param fs: ceph filesystem handle
31 :param vol_spec: volume specification
32 :param group: group object for the clone
33 :param subvolname: clone subvolume nam
34 :param pool: the RADOS pool where the data objects of the cloned subvolume will be stored
35 :param source_volume: source subvolumes volume name
36 :param source_subvolume: source (parent) subvolume object
37 :param snapname: source subvolume snapshot
38 :return None
39 """
cd265ab1 40 subvolume = loaded_subvolumes.get_subvolume_object_max(mgr, fs, vol_spec, group, subvolname)
92f5a8d4
TL
41 subvolume.create_clone(pool, source_volume, source_subvolume, snapname)
42
20effc67 43
cd265ab1 44def remove_subvol(mgr, fs, vol_spec, group, subvolname, force=False, retainsnaps=False):
92f5a8d4
TL
45 """
46 remove a subvolume.
47
48 :param fs: ceph filesystem handle
49 :param vol_spec: volume specification
50 :param group: group object for the subvolume
51 :param subvolname: subvolume name
52 :param force: force remove subvolumes
53 :return: None
54 """
adb31ebb 55 op_type = SubvolumeOpType.REMOVE if not force else SubvolumeOpType.REMOVE_FORCE
cd265ab1 56 with open_subvol(mgr, fs, vol_spec, group, subvolname, op_type) as subvolume:
adb31ebb 57 subvolume.remove(retainsnaps)
92f5a8d4 58
20effc67 59
92f5a8d4 60@contextmanager
cd265ab1 61def open_subvol(mgr, fs, vol_spec, group, subvolname, op_type):
92f5a8d4
TL
62 """
63 open a subvolume. This API is to be used as a context manager.
64
65 :param fs: ceph filesystem handle
66 :param vol_spec: volume specification
67 :param group: group object for the subvolume
68 :param subvolname: subvolume name
adb31ebb 69 :param op_type: operation type for which subvolume is being opened
92f5a8d4
TL
70 :return: yields a subvolume object (subclass of SubvolumeTemplate)
71 """
cd265ab1 72 subvolume = loaded_subvolumes.get_subvolume_object(mgr, fs, vol_spec, group, subvolname)
adb31ebb 73 subvolume.open(op_type)
92f5a8d4 74 yield subvolume