* Alpine build related script, documentation and test have been removed since
the most updated APKBUILD script of Ceph is already included by Alpine Linux's
aports repository.
+
+* fs: Names of new FSs, volumes, subvolumes and subvolume groups can only
+ contain alphanumeric and ``-``, ``_`` and ``.`` characters. Some commands
+ or CephX credentials may not work with old FSs with non-conformant names.
import json
+from io import StringIO
from teuthology.orchestra.run import CommandFailedError
CLIENTS_REQUIRED = 1
MDSS_REQUIRED = 1
+ def test_fsnames_can_only_by_goodchars(self):
+ n = 'test_fsnames_can_only_by_goodchars'
+ metapoolname, datapoolname = n+'-testmetapool', n+'-testdatapool'
+ badname = n+'badname@#'
+
+ self.fs.mon_manager.raw_cluster_cmd('osd', 'pool', 'create',
+ n+metapoolname)
+ self.fs.mon_manager.raw_cluster_cmd('osd', 'pool', 'create',
+ n+datapoolname)
+
+ # test that fsname not with "goodchars" fails
+ args = ['fs', 'new', badname, metapoolname, datapoolname]
+ proc = self.fs.mon_manager.run_cluster_cmd(args=args,stderr=StringIO(),
+ check_status=False)
+ self.assertIn('invalid chars', proc.stderr.getvalue().lower())
+
+ self.fs.mon_manager.raw_cluster_cmd('osd', 'pool', 'rm', metapoolname,
+ metapoolname,
+ '--yes-i-really-really-mean-it-not-faking')
+ self.fs.mon_manager.raw_cluster_cmd('osd', 'pool', 'rm', datapoolname,
+ datapoolname,
+ '--yes-i-really-really-mean-it-not-faking')
+
def test_fs_status(self):
"""
That `ceph fs status` command functions.
self.assertEqual(ce.exitstatus, errno.ENOENT)
else:
self.fail("expected the 'fs subvolumegroup snapshot {0}' command to fail".format(op))
+
+ def test_names_can_only_be_goodchars(self):
+ """
+ Test the creating vols, subvols subvolgroups fails when their names uses
+ characters beyond [a-zA-Z0-9 -_.].
+ """
+ volname, badname = 'testvol', 'abcd@#'
+
+ with self.assertRaises(CommandFailedError):
+ self._fs_cmd('volume', 'create', badname)
+ self._fs_cmd('volume', 'create', volname)
+
+ with self.assertRaises(CommandFailedError):
+ self._fs_cmd('subvolumegroup', 'create', volname, badname)
+
+ with self.assertRaises(CommandFailedError):
+ self._fs_cmd('subvolume', 'create', volname, badname)
+ self._fs_cmd('volume', 'rm', volname, '--yes-i-really-mean-it')
"make new filesystem using pools <metadata> and <data>",
"mds", "rw", FLAG(OBSOLETE))
COMMAND("fs new "
- "name=fs_name,type=CephString "
+ "name=fs_name,type=CephString,goodchars=[A-Za-z0-9-_.] "
"name=metadata,type=CephString "
"name=data,type=CephString "
"name=force,type=CephBool,req=false "
log = logging.getLogger(__name__)
+goodchars = '[A-Za-z0-9-_.]'
+
class VolumesInfoWrapper():
def __init__(self, f, context):
self.f = f
},
{
'cmd': 'fs volume create '
- 'name=name,type=CephString '
+ f'name=name,type=CephString,goodchars={goodchars} '
'name=placement,type=CephString,req=false ',
'desc': "Create a CephFS volume",
'perm': 'rw'
{
'cmd': 'fs subvolumegroup create '
'name=vol_name,type=CephString '
- 'name=group_name,type=CephString '
+ f'name=group_name,type=CephString,goodchars={goodchars} '
'name=pool_layout,type=CephString,req=false '
'name=uid,type=CephInt,req=false '
'name=gid,type=CephInt,req=false '
{
'cmd': 'fs subvolume create '
'name=vol_name,type=CephString '
- 'name=sub_name,type=CephString '
+ f'name=sub_name,type=CephString,goodchars={goodchars} '
'name=size,type=CephInt,req=false '
'name=group_name,type=CephString,req=false '
'name=pool_layout,type=CephString,req=false '
{
'cmd': 'nfs cluster create '
'name=type,type=CephString '
- 'name=clusterid,type=CephString,goodchars=[A-Za-z0-9-_.] '
+ f'name=clusterid,type=CephString,goodchars={goodchars} '
'name=placement,type=CephString,req=false ',
'desc': "Create an NFS Cluster",
'perm': 'rw'