import logging
import os
from textwrap import dedent
-from ceph_volume import process, conf, decorators, terminal, __release__, configuration
+from ceph_volume import process, conf, decorators, terminal, configuration
from ceph_volume.util import system, disk
from ceph_volume.util import prepare as prepare_utils
from ceph_volume.util import encryption as encryption_utils
raise RuntimeError('could not find %s with uuid %s' % (device_type, device_uuid))
-def activate_bluestore(osd_lvs, no_systemd=False):
+def activate_bluestore(osd_lvs, no_systemd=False, no_tmpfs=False):
for lv in osd_lvs:
if lv.tags.get('ceph.type') == 'block':
osd_block_lv = lv
osd_id = osd_block_lv.tags['ceph.osd_id']
conf.cluster = osd_block_lv.tags['ceph.cluster_name']
osd_fsid = osd_block_lv.tags['ceph.osd_fsid']
+ configuration.load_ceph_conf_path(osd_block_lv.tags['ceph.cluster_name'])
+ configuration.load()
# mount on tmpfs the osd directory
osd_path = '/var/lib/ceph/osd/%s-%s' % (conf.cluster, osd_id)
if not system.path_is_mounted(osd_path):
# mkdir -p and mount as tmpfs
- prepare_utils.create_osd_path(osd_id, tmpfs=True)
+ prepare_utils.create_osd_path(osd_id, tmpfs=not no_tmpfs)
# XXX This needs to be removed once ceph-bluestore-tool can deal with
# symlinks that exist in the osd dir
for link_name in ['block', 'block.db', 'block.wal']:
prime_command = [
'ceph-bluestore-tool', '--cluster=%s' % conf.cluster,
'prime-osd-dir', '--dev', osd_lv_path,
- '--path', osd_path]
-
- if __release__ != "luminous":
- # mon-config changes are not available in Luminous
- prime_command.append('--no-mon-config')
+ '--path', osd_path, '--no-mon-config']
process.run(prime_command)
# always re-do the symlink regardless if it exists, so that the block,
'assuming bluestore')
return activate_bluestore(lvs, args.no_systemd)
- if args.bluestore:
- activate_bluestore(lvs, args.no_systemd)
- elif args.filestore:
+
+ # explicit filestore/bluestore flags take precedence
+ if getattr(args, 'bluestore', False):
+ activate_bluestore(lvs, args.no_systemd, getattr(args, 'no_tmpfs', False))
+ elif getattr(args, 'filestore', False):
+ activate_filestore(lvs, args.no_systemd)
+ elif any('ceph.block_device' in lv.tags for lv in lvs):
+ activate_bluestore(lvs, args.no_systemd, getattr(args, 'no_tmpfs', False))
+ elif any('ceph.data_device' in lv.tags for lv in lvs):
activate_filestore(lvs, args.no_systemd)
def main(self):
parser.add_argument(
'--bluestore',
action='store_true',
- help='bluestore objectstore (default)',
+ help='force bluestore objectstore activation',
)
parser.add_argument(
'--filestore',
action='store_true',
- help='filestore objectstore',
+ help='force filestore objectstore activation',
)
parser.add_argument(
'--all',
action='store_true',
help='Skip creating and enabling systemd units and starting OSD services',
)
+ parser.add_argument(
+ '--no-tmpfs',
+ action='store_true',
+ help='Do not use a tmpfs mount for OSD data dir'
+ )
if len(self.argv) == 0:
print(sub_command_help)
return
args = parser.parse_args(self.argv)
- # Default to bluestore here since defaulting it in add_argument may
- # cause both to be True
- if not args.bluestore and not args.filestore:
- args.bluestore = True
if args.activate_all:
self.activate_all(args)
else: