Skip to content

Commit e794a19

Browse files
mgr/vol: allow passing pool names to "fs volume create" cmd
Fixes: https://tracker.ceph.com/issues/69878 Signed-off-by: Rishabh Dave <[email protected]>
1 parent eb4c3bf commit e794a19

File tree

3 files changed

+52
-13
lines changed

3 files changed

+52
-13
lines changed

src/pybind/mgr/volumes/fs/operations/volume.py

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,57 @@ def get_pool_ids(mgr, volname):
7272
return None, None
7373
return metadata_pool_id, data_pool_ids
7474

75-
def create_volume(mgr, volname, placement):
76-
"""
77-
create volume (pool, filesystem and mds)
78-
"""
75+
def create_fs_pools(mgr, volname, data_pool, metadata_pool):
76+
'''
77+
Generate names of metadata pool and data pool and create these pools.
78+
79+
This methods returns a list where the first member represents whether or
80+
not this method ran successfullly.
81+
'''
82+
assert not data_pool and not metadata_pool
83+
7984
metadata_pool, data_pool = gen_pool_names(volname)
80-
# create pools
85+
8186
r, outb, outs = create_pool(mgr, metadata_pool)
8287
if r != 0:
83-
return r, outb, outs
88+
return [False, r, outb, outs]
89+
8490
# default to a bulk pool for data. In case autoscaling has been disabled
85-
# for the cluster with `ceph osd pool set noautoscale`, this will have no effect.
91+
# for the cluster with `ceph osd pool set noautoscale`, this will have
92+
# no effect.
8693
r, outb, outs = create_pool(mgr, data_pool, bulk=True)
94+
# cleanup
8795
if r != 0:
88-
#cleanup
8996
remove_pool(mgr, metadata_pool)
90-
return r, outb, outs
97+
return [False, r, outb, outs]
98+
99+
return [True, data_pool, metadata_pool]
100+
101+
def create_volume(mgr, volname, placement, data_pool, metadata_pool):
102+
"""
103+
Create volume, create pools if pool names are not passed and create MDS
104+
based on placement passed.
105+
"""
106+
# although writing this case is technically redundant (because pool names
107+
# are passed by user they must exist already), leave it here so that some
108+
# future readers know that this case is already considered and not missed
109+
# by chance.
110+
if data_pool and metadata_pool:
111+
pass
112+
elif not data_pool and metadata_pool:
113+
errmsg = 'data pool name isn\'t passed'
114+
return -errno.EINVAL, '', errmsg
115+
elif data_pool and not metadata_pool:
116+
errmsg = 'metadata pool name isn\'t passed'
117+
return -errno.EINVAL, '', errmsg
118+
elif not data_pool and not metadata_pool:
119+
retval = create_fs_pools(mgr, volname, data_pool, metadata_pool)
120+
success = retval.pop(0)
121+
if success:
122+
data_pool, metadata_pool = retval
123+
else:
124+
return retval
125+
91126
# create filesystem
92127
r, outb, outs = create_filesystem(mgr, volname, metadata_pool, data_pool)
93128
if r != 0:

src/pybind/mgr/volumes/fs/volume.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ def wrapper(self, *args, **kwargs):
120120

121121
### volume operations -- create, rm, ls
122122

123-
def create_fs_volume(self, volname, placement):
124-
return create_volume(self.mgr, volname, placement)
123+
def create_fs_volume(self, volname, placement, data_pool, meta_pool):
124+
return create_volume(self.mgr, volname, placement, data_pool, meta_pool)
125125

126126
def delete_fs_volume(self, volname, confirm):
127127
if confirm != "--yes-i-really-mean-it":

src/pybind/mgr/volumes/module.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
4949
{
5050
'cmd': 'fs volume create '
5151
f'name=name,type=CephString,goodchars={goodchars} '
52-
'name=placement,type=CephString,req=false ',
52+
'name=placement,type=CephString,req=false '
53+
f'name=meta_pool,type=CephString,goodchars={goodchars},req=false '
54+
f'name=data_pool,type=CephString,goodchars={goodchars},req=false ',
5355
'desc': "Create a CephFS volume",
5456
'perm': 'rw'
5557
},
@@ -679,7 +681,9 @@ def handle_command(self, inbuf, cmd):
679681
def _cmd_fs_volume_create(self, inbuf, cmd):
680682
vol_id = cmd['name']
681683
placement = cmd.get('placement', '')
682-
return self.vc.create_fs_volume(vol_id, placement)
684+
data_pool = cmd.get('data_pool', None)
685+
meta_pool = cmd.get('meta_pool', None)
686+
return self.vc.create_fs_volume(vol_id, placement, data_pool, meta_pool)
683687

684688
@mgr_cmd_wrap
685689
def _cmd_fs_volume_rm(self, inbuf, cmd):

0 commit comments

Comments
 (0)