if mdss.remotes:
log.info('Setting up CephFS filesystem...')
- fs = Filesystem(ctx, create='cephfs')
+ fs = Filesystem(ctx, name='cephfs', create=True)
is_active_mds = lambda role: 'mds.' in role and not role.endswith('-s') and '-s-' not in role
all_roles = [item for remote_roles in mdss.remotes.values() for item in remote_roles]
self.mds_cluster.mon_manager.raw_cluster_cmd("auth", "del", entry['entity'])
if self.REQUIRE_FILESYSTEM:
- self.fs = self.mds_cluster.newfs(True)
+ self.fs = self.mds_cluster.newfs(create=True)
self.fs.mds_restart()
# In case some test messed with auth caps, reset them
self._one_or_all(mds_id, _fail_restart)
- def newfs(self, name):
- return Filesystem(self._ctx, create=name)
+ def newfs(self, name='cephfs', create=True):
+ return Filesystem(self._ctx, name=name, create=create)
def status(self):
return FSStatus(self.mon_manager)
This object is for driving a CephFS filesystem. The MDS daemons driven by
MDSCluster may be shared with other Filesystems.
"""
- def __init__(self, ctx, fscid=None, create=None):
+ def __init__(self, ctx, fscid=None, name=None, create=False):
super(Filesystem, self).__init__(ctx)
+ self.name = name
self.id = None
self.name = None
self.metadata_pool_name = None
self.client_id = client_list[0]
self.client_remote = list(misc.get_clients(ctx=ctx, roles=["client.{0}".format(self.client_id)]))[0][1]
- if create is not None:
+ if name is not None:
if fscid is not None:
raise RuntimeError("cannot specify fscid when creating fs")
- if create is True:
- self.name = 'cephfs'
- else:
- self.name = create
- if not self.legacy_configured():
+ if create and not self.legacy_configured():
self.create()
- elif fscid is not None:
- self.id = fscid
- self.getinfo(refresh = True)
+ else:
+ if fscid is not None:
+ self.id = fscid
+ self.getinfo(refresh = True)
# Stash a reference to the first created filesystem on ctx, so
# that if someone drops to the interactive shell they can easily
self.get_pool_names(status = status, refresh = refresh)
return status
+ def set_metadata_overlay(self, overlay):
+ if fscid is not None:
+ raise RuntimeError("cannot specify fscid when configuring overlay")
+ self.metadata_overlay = overlay
+
def deactivate(self, rank):
if rank < 0:
raise RuntimeError("invalid rank")
# FIXME: unimplemented
pass
- def newfs(self, name):
- return LocalFilesystem(self._ctx, create=name)
+ def newfs(self, name='cephfs', create=True):
+ return LocalFilesystem(self._ctx, name=name, create=create)
class LocalMgrCluster(LocalCephCluster, MgrCluster):
class LocalFilesystem(Filesystem, LocalMDSCluster):
- def __init__(self, ctx, fscid=None, create=None):
+ def __init__(self, ctx, fscid=None, name='cephfs', create=False):
# Deliberately skip calling parent constructor
self._ctx = ctx
self.id = None
self.name = None
self.metadata_pool_name = None
+ self.metadata_overlay = False
+ self.data_pool_name = None
self.data_pools = None
# Hack: cheeky inspection of ceph.conf to see what MDSs exist
self._conf = defaultdict(dict)
- if create is not None:
+ if name is not None:
if fscid is not None:
raise RuntimeError("cannot specify fscid when creating fs")
- if create is True:
- self.name = 'cephfs'
- else:
- self.name = create
- self.create()
- elif fscid is not None:
- self.id = fscid
- self.getinfo(refresh=True)
+ if create and not self.legacy_configured():
+ self.create()
+ else:
+ if fscid is not None:
+ self.id = fscid
+ self.getinfo(refresh=True)
# Stash a reference to the first created filesystem on ctx, so
# that if someone drops to the interactive shell they can easily