From 594b6a361d07ea8a619ca874010b6f3c89c963fc Mon Sep 17 00:00:00 2001 From: Chris MacNaughton Date: Mon, 14 Aug 2017 15:45:30 +0200 Subject: [PATCH] Add optional additional device types We want to allow the user to use additional block devices as bluestore Write Ahead Log or bluestore RocksDB storage Closes-Bug: #1710474 Change-Id: I4d5a03a340b88959f9d36864244fd42060302a15 --- .gitignore | 1 + ceph/utils.py | 27 +++++++++++++++++++++++++++ tox.ini | 1 + 3 files changed, 29 insertions(+) diff --git a/.gitignore b/.gitignore index 463840f..daef4ad 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ dist .project .pydevproject +.stestr \ No newline at end of file diff --git a/ceph/utils.py b/ceph/utils.py index e0fd6be..ed23a92 100644 --- a/ceph/utils.py +++ b/ceph/utils.py @@ -51,6 +51,8 @@ from charmhelpers.core.hookenv import ( DEBUG, ERROR, WARNING, + storage_get, + storage_list, ) from charmhelpers.fetch import ( apt_cache, @@ -1359,6 +1361,23 @@ def find_least_used_journal(journal_devices): return least[1] +def get_devices(name): + """ Merge config and juju storage based devices + + :name: THe name of the device type, eg: wal, osd, journal + :returns: Set(device names), which are strings + """ + if config(name): + devices = [l.strip() for l in config(name).split(' ')] + else: + devices = [] + storage_ids = storage_list(name) + devices.extend((storage_get('location', s) for s in storage_ids)) + devices = filter(os.path.exists, devices) + + return set(devices) + + def osdize(dev, osd_format, osd_journal, reformat_osd=False, ignore_errors=False, encrypt=False, bluestore=False): if dev.startswith('/dev'): @@ -1405,6 +1424,14 @@ def osdize_dev(dev, osd_format, osd_journal, reformat_osd=False, # NOTE(jamespage): enable experimental bluestore support if cmp_pkgrevno('ceph', '10.2.0') >= 0 and bluestore: cmd.append('--bluestore') + wal = get_devices('bluestore-wal') + if wal: + cmd.append('--block.wal') + cmd.append(wal) + db = get_devices('bluestore-db') + if db: + cmd.append('--block.db') + cmd.append(db) elif cmp_pkgrevno('ceph', '12.1.0') >= 0 and not bluestore: cmd.append('--filestore') diff --git a/tox.ini b/tox.ini index b9a2be6..b51ed19 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,7 @@ [tox] envlist = pep8,py27,py34,py35 skipsdist = True +skip_missing_interpreters = True [testenv] setenv = VIRTUAL_ENV={envdir}