]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/volumes/module.py
4 from mgr_module
import MgrModule
7 from .fs
.volume
import VolumeClient
9 class Module(orchestrator
.OrchestratorClientMixin
, MgrModule
):
12 'cmd': 'fs volume ls',
13 'desc': "List volumes",
17 'cmd': 'fs volume create '
18 'name=name,type=CephString ',
19 'desc': "Create a CephFS volume",
23 'cmd': 'fs volume rm '
24 'name=vol_name,type=CephString '
25 'name=yes-i-really-mean-it,type=CephString,req=false ',
26 'desc': "Delete a FS volume by passing --yes-i-really-mean-it flag",
30 'cmd': 'fs subvolumegroup ls '
31 'name=vol_name,type=CephString ',
32 'desc': "List subvolumegroups",
36 'cmd': 'fs subvolumegroup create '
37 'name=vol_name,type=CephString '
38 'name=group_name,type=CephString '
39 'name=pool_layout,type=CephString,req=false '
40 'name=uid,type=CephInt,req=false '
41 'name=gid,type=CephInt,req=false '
42 'name=mode,type=CephString,req=false ',
43 'desc': "Create a CephFS subvolume group in a volume, and optionally, "
44 "with a specific data pool layout, and a specific numeric mode",
48 'cmd': 'fs subvolumegroup rm '
49 'name=vol_name,type=CephString '
50 'name=group_name,type=CephString '
51 'name=force,type=CephBool,req=false ',
52 'desc': "Delete a CephFS subvolume group in a volume",
56 'cmd': 'fs subvolume ls '
57 'name=vol_name,type=CephString '
58 'name=group_name,type=CephString,req=false ',
59 'desc': "List subvolumes",
63 'cmd': 'fs subvolume create '
64 'name=vol_name,type=CephString '
65 'name=sub_name,type=CephString '
66 'name=size,type=CephInt,req=false '
67 'name=group_name,type=CephString,req=false '
68 'name=pool_layout,type=CephString,req=false '
69 'name=uid,type=CephInt,req=false '
70 'name=gid,type=CephInt,req=false '
71 'name=mode,type=CephString,req=false ',
72 'desc': "Create a CephFS subvolume in a volume, and optionally, "
73 "with a specific size (in bytes), a specific data pool layout, "
74 "a specific mode, and in a specific subvolume group",
78 'cmd': 'fs subvolume rm '
79 'name=vol_name,type=CephString '
80 'name=sub_name,type=CephString '
81 'name=group_name,type=CephString,req=false '
82 'name=force,type=CephBool,req=false ',
83 'desc': "Delete a CephFS subvolume in a volume, and optionally, "
84 "in a specific subvolume group",
88 'cmd': 'fs subvolumegroup getpath '
89 'name=vol_name,type=CephString '
90 'name=group_name,type=CephString ',
91 'desc': "Get the mountpath of a CephFS subvolume group in a volume",
95 'cmd': 'fs subvolume getpath '
96 'name=vol_name,type=CephString '
97 'name=sub_name,type=CephString '
98 'name=group_name,type=CephString,req=false ',
99 'desc': "Get the mountpath of a CephFS subvolume in a volume, "
100 "and optionally, in a specific subvolume group",
104 'cmd': 'fs subvolumegroup snapshot ls '
105 'name=vol_name,type=CephString '
106 'name=group_name,type=CephString ',
107 'desc': "List subvolumegroup snapshots",
111 'cmd': 'fs subvolumegroup snapshot create '
112 'name=vol_name,type=CephString '
113 'name=group_name,type=CephString '
114 'name=snap_name,type=CephString ',
115 'desc': "Create a snapshot of a CephFS subvolume group in a volume",
119 'cmd': 'fs subvolumegroup snapshot rm '
120 'name=vol_name,type=CephString '
121 'name=group_name,type=CephString '
122 'name=snap_name,type=CephString '
123 'name=force,type=CephBool,req=false ',
124 'desc': "Delete a snapshot of a CephFS subvolume group in a volume",
128 'cmd': 'fs subvolume snapshot ls '
129 'name=vol_name,type=CephString '
130 'name=sub_name,type=CephString '
131 'name=group_name,type=CephString,req=false ',
132 'desc': "List subvolume snapshots",
136 'cmd': 'fs subvolume snapshot create '
137 'name=vol_name,type=CephString '
138 'name=sub_name,type=CephString '
139 'name=snap_name,type=CephString '
140 'name=group_name,type=CephString,req=false ',
141 'desc': "Create a snapshot of a CephFS subvolume in a volume, "
142 "and optionally, in a specific subvolume group",
146 'cmd': 'fs subvolume snapshot rm '
147 'name=vol_name,type=CephString '
148 'name=sub_name,type=CephString '
149 'name=snap_name,type=CephString '
150 'name=group_name,type=CephString,req=false '
151 'name=force,type=CephBool,req=false ',
152 'desc': "Delete a snapshot of a CephFS subvolume in a volume, "
153 "and optionally, in a specific subvolume group",
157 'cmd': 'fs subvolume resize '
158 'name=vol_name,type=CephString '
159 'name=sub_name,type=CephString '
160 'name=new_size,type=CephString,req=true '
161 'name=group_name,type=CephString,req=false '
162 'name=no_shrink,type=CephBool,req=false ',
163 'desc': "Resize a CephFS subvolume",
167 'cmd': 'fs subvolume snapshot protect '
168 'name=vol_name,type=CephString '
169 'name=sub_name,type=CephString '
170 'name=snap_name,type=CephString '
171 'name=group_name,type=CephString,req=false ',
172 'desc': "Protect snapshot of a CephFS subvolume in a volume, "
173 "and optionally, in a specific subvolume group",
177 'cmd': 'fs subvolume snapshot unprotect '
178 'name=vol_name,type=CephString '
179 'name=sub_name,type=CephString '
180 'name=snap_name,type=CephString '
181 'name=group_name,type=CephString,req=false ',
182 'desc': "Unprotect a snapshot of a CephFS subvolume in a volume, "
183 "and optionally, in a specific subvolume group",
187 'cmd': 'fs subvolume snapshot clone '
188 'name=vol_name,type=CephString '
189 'name=sub_name,type=CephString '
190 'name=snap_name,type=CephString '
191 'name=target_sub_name,type=CephString '
192 'name=pool_layout,type=CephString,req=false '
193 'name=group_name,type=CephString,req=false '
194 'name=target_group_name,type=CephString,req=false ',
195 'desc': "Clone a snapshot to target subvolume",
199 'cmd': 'fs clone status '
200 'name=vol_name,type=CephString '
201 'name=clone_name,type=CephString '
202 'name=group_name,type=CephString,req=false ',
203 'desc': "Get status on a cloned subvolume.",
207 # volume ls [recursive]
208 # subvolume ls <volume>
209 # volume authorize/deauthorize
210 # subvolume authorize/deauthorize
212 # volume describe (free space, etc)
213 # volume auth list (vc.get_authorized_ids)
217 # FIXME: we're doing CephFSVolumeClient.recover on every
218 # path where we instantiate and connect a client. Perhaps
219 # keep clients alive longer, or just pass a "don't recover"
220 # flag in if it's the >1st time we connected a particular
221 # volume in the lifetime of this module instance.
224 def __init__(self
, *args
, **kwargs
):
225 super(Module
, self
).__init
__(*args
, **kwargs
)
226 self
.vc
= VolumeClient(self
)
234 def handle_command(self
, inbuf
, cmd
):
235 handler_name
= "_cmd_" + cmd
['prefix'].replace(" ", "_")
237 handler
= getattr(self
, handler_name
)
238 except AttributeError:
239 return -errno
.EINVAL
, "", "Unknown command"
241 return handler(inbuf
, cmd
)
243 def _cmd_fs_volume_create(self
, inbuf
, cmd
):
245 return self
.vc
.create_fs_volume(vol_id
)
247 def _cmd_fs_volume_rm(self
, inbuf
, cmd
):
248 vol_name
= cmd
['vol_name']
249 confirm
= cmd
.get('yes-i-really-mean-it', None)
250 return self
.vc
.delete_fs_volume(vol_name
, confirm
)
252 def _cmd_fs_volume_ls(self
, inbuf
, cmd
):
253 return self
.vc
.list_fs_volumes()
255 def _cmd_fs_subvolumegroup_create(self
, inbuf
, cmd
):
257 :return: a 3-tuple of return code(int), empty string(str), error message (str)
259 return self
.vc
.create_subvolume_group(
260 vol_name
=cmd
['vol_name'], group_name
=cmd
['group_name'],
261 pool_layout
=cmd
.get('pool_layout', None), mode
=cmd
.get('mode', '755'),
262 uid
=cmd
.get('uid', None), gid
=cmd
.get('gid', None))
264 def _cmd_fs_subvolumegroup_rm(self
, inbuf
, cmd
):
266 :return: a 3-tuple of return code(int), empty string(str), error message (str)
268 return self
.vc
.remove_subvolume_group(vol_name
=cmd
['vol_name'],
269 group_name
=cmd
['group_name'],
270 force
=cmd
.get('force', False))
272 def _cmd_fs_subvolumegroup_ls(self
, inbuf
, cmd
):
273 return self
.vc
.list_subvolume_groups(vol_name
=cmd
['vol_name'])
275 def _cmd_fs_subvolume_create(self
, inbuf
, cmd
):
277 :return: a 3-tuple of return code(int), empty string(str), error message (str)
279 return self
.vc
.create_subvolume(vol_name
=cmd
['vol_name'],
280 sub_name
=cmd
['sub_name'],
281 group_name
=cmd
.get('group_name', None),
282 size
=cmd
.get('size', None),
283 pool_layout
=cmd
.get('pool_layout', None),
284 uid
=cmd
.get('uid', None),
285 gid
=cmd
.get('gid', None),
286 mode
=cmd
.get('mode', '755'))
288 def _cmd_fs_subvolume_rm(self
, inbuf
, cmd
):
290 :return: a 3-tuple of return code(int), empty string(str), error message (str)
292 return self
.vc
.remove_subvolume(vol_name
=cmd
['vol_name'],
293 sub_name
=cmd
['sub_name'],
294 group_name
=cmd
.get('group_name', None),
295 force
=cmd
.get('force', False))
297 def _cmd_fs_subvolume_ls(self
, inbuf
, cmd
):
298 return self
.vc
.list_subvolumes(vol_name
=cmd
['vol_name'],
299 group_name
=cmd
.get('group_name', None))
301 def _cmd_fs_subvolumegroup_getpath(self
, inbuf
, cmd
):
302 return self
.vc
.getpath_subvolume_group(
303 vol_name
=cmd
['vol_name'], group_name
=cmd
['group_name'])
305 def _cmd_fs_subvolume_getpath(self
, inbuf
, cmd
):
306 return self
.vc
.subvolume_getpath(vol_name
=cmd
['vol_name'],
307 sub_name
=cmd
['sub_name'],
308 group_name
=cmd
.get('group_name', None))
310 def _cmd_fs_subvolumegroup_snapshot_create(self
, inbuf
, cmd
):
311 return self
.vc
.create_subvolume_group_snapshot(vol_name
=cmd
['vol_name'],
312 group_name
=cmd
['group_name'],
313 snap_name
=cmd
['snap_name'])
315 def _cmd_fs_subvolumegroup_snapshot_rm(self
, inbuf
, cmd
):
316 return self
.vc
.remove_subvolume_group_snapshot(vol_name
=cmd
['vol_name'],
317 group_name
=cmd
['group_name'],
318 snap_name
=cmd
['snap_name'],
319 force
=cmd
.get('force', False))
321 def _cmd_fs_subvolumegroup_snapshot_ls(self
, inbuf
, cmd
):
322 return self
.vc
.list_subvolume_group_snapshots(vol_name
=cmd
['vol_name'],
323 group_name
=cmd
['group_name'])
325 def _cmd_fs_subvolume_snapshot_create(self
, inbuf
, cmd
):
326 return self
.vc
.create_subvolume_snapshot(vol_name
=cmd
['vol_name'],
327 sub_name
=cmd
['sub_name'],
328 snap_name
=cmd
['snap_name'],
329 group_name
=cmd
.get('group_name', None))
331 def _cmd_fs_subvolume_snapshot_rm(self
, inbuf
, cmd
):
332 return self
.vc
.remove_subvolume_snapshot(vol_name
=cmd
['vol_name'],
333 sub_name
=cmd
['sub_name'],
334 snap_name
=cmd
['snap_name'],
335 group_name
=cmd
.get('group_name', None),
336 force
=cmd
.get('force', False))
338 def _cmd_fs_subvolume_snapshot_ls(self
, inbuf
, cmd
):
339 return self
.vc
.list_subvolume_snapshots(vol_name
=cmd
['vol_name'],
340 sub_name
=cmd
['sub_name'],
341 group_name
=cmd
.get('group_name', None))
343 def _cmd_fs_subvolume_resize(self
, inbuf
, cmd
):
344 return self
.vc
.resize_subvolume(vol_name
=cmd
['vol_name'], sub_name
=cmd
['sub_name'],
345 new_size
=cmd
['new_size'], group_name
=cmd
.get('group_name', None),
346 no_shrink
=cmd
.get('no_shrink', False))
348 def _cmd_fs_subvolume_snapshot_protect(self
, inbuf
, cmd
):
349 return self
.vc
.protect_subvolume_snapshot(vol_name
=cmd
['vol_name'], sub_name
=cmd
['sub_name'],
350 snap_name
=cmd
['snap_name'], group_name
=cmd
.get('group_name', None))
352 def _cmd_fs_subvolume_snapshot_unprotect(self
, inbuf
, cmd
):
353 return self
.vc
.unprotect_subvolume_snapshot(vol_name
=cmd
['vol_name'], sub_name
=cmd
['sub_name'],
354 snap_name
=cmd
['snap_name'], group_name
=cmd
.get('group_name', None))
356 def _cmd_fs_subvolume_snapshot_clone(self
, inbuf
, cmd
):
357 return self
.vc
.clone_subvolume_snapshot(
358 vol_name
=cmd
['vol_name'], sub_name
=cmd
['sub_name'], snap_name
=cmd
['snap_name'],
359 group_name
=cmd
.get('group_name', None), pool_layout
=cmd
.get('pool_layout', None),
360 target_sub_name
=cmd
['target_sub_name'], target_group_name
=cmd
.get('target_group_name', None))
362 def _cmd_fs_clone_status(self
, inbuf
, cmd
):
363 return self
.vc
.clone_status(
364 vol_name
=cmd
['vol_name'], clone_name
=cmd
['clone_name'], group_name
=cmd
.get('group_name', None))