]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | from contextlib import contextmanager |
2 | ||
adb31ebb | 3 | from .template import SubvolumeOpType |
92f5a8d4 TL |
4 | |
5 | from .versions import loaded_subvolumes | |
6 | ||
cd265ab1 | 7 | def 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 | 26 | def 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 | 44 | def 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 | 61 | def 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 |