Add argument 'osd_id' to 'osdize'
In order to fully support OSD replacement, we need a way to recycle previously used OSD ids. This is achieved by passing the parameter '--osd-id' to 'ceph-volume lvm create'. As such, this patchset adds the needed support to specify that parameter. Change-Id: I43d0a0bc11664c37532c0117711affc93c9d1ad1
This commit is contained in:
parent
328aa0f051
commit
8071a01fb8
@ -1162,6 +1162,10 @@ osd_upgrade_caps = collections.OrderedDict([
|
|||||||
'allow command "osd in"',
|
'allow command "osd in"',
|
||||||
'allow command "osd rm"',
|
'allow command "osd rm"',
|
||||||
'allow command "auth del"',
|
'allow command "auth del"',
|
||||||
|
'allow command "osd safe-to-destroy"',
|
||||||
|
'allow command "osd crush reweight"',
|
||||||
|
'allow command "osd purge"',
|
||||||
|
'allow command "osd destroy"',
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -1520,11 +1524,11 @@ def get_devices(name):
|
|||||||
|
|
||||||
|
|
||||||
def osdize(dev, osd_format, osd_journal, ignore_errors=False, encrypt=False,
|
def osdize(dev, osd_format, osd_journal, ignore_errors=False, encrypt=False,
|
||||||
bluestore=False, key_manager=CEPH_KEY_MANAGER):
|
bluestore=False, key_manager=CEPH_KEY_MANAGER, osd_id=None):
|
||||||
if dev.startswith('/dev'):
|
if dev.startswith('/dev'):
|
||||||
osdize_dev(dev, osd_format, osd_journal,
|
osdize_dev(dev, osd_format, osd_journal,
|
||||||
ignore_errors, encrypt,
|
ignore_errors, encrypt,
|
||||||
bluestore, key_manager)
|
bluestore, key_manager, osd_id)
|
||||||
else:
|
else:
|
||||||
if cmp_pkgrevno('ceph', '14.0.0') >= 0:
|
if cmp_pkgrevno('ceph', '14.0.0') >= 0:
|
||||||
log("Directory backed OSDs can not be created on Nautilus",
|
log("Directory backed OSDs can not be created on Nautilus",
|
||||||
@ -1534,7 +1538,8 @@ def osdize(dev, osd_format, osd_journal, ignore_errors=False, encrypt=False,
|
|||||||
|
|
||||||
|
|
||||||
def osdize_dev(dev, osd_format, osd_journal, ignore_errors=False,
|
def osdize_dev(dev, osd_format, osd_journal, ignore_errors=False,
|
||||||
encrypt=False, bluestore=False, key_manager=CEPH_KEY_MANAGER):
|
encrypt=False, bluestore=False, key_manager=CEPH_KEY_MANAGER,
|
||||||
|
osd_id=None):
|
||||||
"""
|
"""
|
||||||
Prepare a block device for use as a Ceph OSD
|
Prepare a block device for use as a Ceph OSD
|
||||||
|
|
||||||
@ -1599,7 +1604,8 @@ def osdize_dev(dev, osd_format, osd_journal, ignore_errors=False,
|
|||||||
osd_journal,
|
osd_journal,
|
||||||
encrypt,
|
encrypt,
|
||||||
bluestore,
|
bluestore,
|
||||||
key_manager)
|
key_manager,
|
||||||
|
osd_id)
|
||||||
else:
|
else:
|
||||||
cmd = _ceph_disk(dev,
|
cmd = _ceph_disk(dev,
|
||||||
osd_format,
|
osd_format,
|
||||||
@ -1683,7 +1689,7 @@ def _ceph_disk(dev, osd_format, osd_journal, encrypt=False, bluestore=False):
|
|||||||
|
|
||||||
|
|
||||||
def _ceph_volume(dev, osd_journal, encrypt=False, bluestore=False,
|
def _ceph_volume(dev, osd_journal, encrypt=False, bluestore=False,
|
||||||
key_manager=CEPH_KEY_MANAGER):
|
key_manager=CEPH_KEY_MANAGER, osd_id=None):
|
||||||
"""
|
"""
|
||||||
Prepare and activate a device for usage as a Ceph OSD using ceph-volume.
|
Prepare and activate a device for usage as a Ceph OSD using ceph-volume.
|
||||||
|
|
||||||
@ -1695,6 +1701,7 @@ def _ceph_volume(dev, osd_journal, encrypt=False, bluestore=False,
|
|||||||
:param: encrypt: Use block device encryption
|
:param: encrypt: Use block device encryption
|
||||||
:param: bluestore: Use bluestore storage for OSD
|
:param: bluestore: Use bluestore storage for OSD
|
||||||
:param: key_manager: dm-crypt Key Manager to use
|
:param: key_manager: dm-crypt Key Manager to use
|
||||||
|
:param: osd_id: The OSD-id to recycle, or None to create a new one
|
||||||
:raises subprocess.CalledProcessError: in the event that any supporting
|
:raises subprocess.CalledProcessError: in the event that any supporting
|
||||||
LVM operation failed.
|
LVM operation failed.
|
||||||
:returns: list. 'ceph-volume' command and required parameters for
|
:returns: list. 'ceph-volume' command and required parameters for
|
||||||
@ -1716,6 +1723,9 @@ def _ceph_volume(dev, osd_journal, encrypt=False, bluestore=False,
|
|||||||
if encrypt and key_manager == CEPH_KEY_MANAGER:
|
if encrypt and key_manager == CEPH_KEY_MANAGER:
|
||||||
cmd.append('--dmcrypt')
|
cmd.append('--dmcrypt')
|
||||||
|
|
||||||
|
if osd_id is not None:
|
||||||
|
cmd.extend(['--osd-id', str(osd_id)])
|
||||||
|
|
||||||
# On-disk journal volume creation
|
# On-disk journal volume creation
|
||||||
if not osd_journal and not bluestore:
|
if not osd_journal and not bluestore:
|
||||||
journal_lv_type = 'journal'
|
journal_lv_type = 'journal'
|
||||||
|
@ -127,7 +127,41 @@ class CephTestCase(unittest.TestCase):
|
|||||||
_is_active_bluestore_device.return_value = False
|
_is_active_bluestore_device.return_value = False
|
||||||
utils.osdize('/dev/sdb', osd_format='xfs', osd_journal=None,
|
utils.osdize('/dev/sdb', osd_format='xfs', osd_journal=None,
|
||||||
bluestore=False)
|
bluestore=False)
|
||||||
_ceph_volume.assert_called_with('/dev/sdb', None, False, False, 'ceph')
|
_ceph_volume.assert_called_with('/dev/sdb', None, False, False,
|
||||||
|
'ceph', None)
|
||||||
|
_check_call.assert_called_with(['ceph-volume', 'prepare'])
|
||||||
|
db.get.assert_called_with('osd-devices', [])
|
||||||
|
db.set.assert_called_with('osd-devices', ['/dev/sdb'])
|
||||||
|
db.flush.assert_called_once()
|
||||||
|
|
||||||
|
@patch.object(utils, 'kv')
|
||||||
|
@patch.object(utils.subprocess, 'check_call')
|
||||||
|
@patch.object(utils, '_ceph_volume')
|
||||||
|
@patch.object(utils, 'is_mapped_luks_device')
|
||||||
|
@patch.object(utils, 'is_active_bluestore_device')
|
||||||
|
@patch.object(utils.os.path, 'exists')
|
||||||
|
@patch.object(utils, 'is_device_mounted')
|
||||||
|
@patch.object(utils, 'cmp_pkgrevno')
|
||||||
|
@patch.object(utils, 'is_block_device')
|
||||||
|
def test_osdize_dev_ceph_volume_with_osdid(self, _is_blk, _cmp, _mounted,
|
||||||
|
_exists, _is_mapped_luks_device,
|
||||||
|
_is_active_bluestore_device,
|
||||||
|
_ceph_volume, _check_call, _kv):
|
||||||
|
"""Test that _ceph_volume is called with an OSD id."""
|
||||||
|
db = MagicMock()
|
||||||
|
_kv.return_value = db
|
||||||
|
db.get.return_value = []
|
||||||
|
_is_blk.return_value = True
|
||||||
|
_mounted.return_value = False
|
||||||
|
_exists.return_value = True
|
||||||
|
_cmp.return_value = 1
|
||||||
|
_ceph_volume.return_value = ['ceph-volume', 'prepare']
|
||||||
|
_is_mapped_luks_device.return_value = False
|
||||||
|
_is_active_bluestore_device.return_value = False
|
||||||
|
utils.osdize('/dev/sdb', osd_format='xfs', osd_journal=None,
|
||||||
|
bluestore=False, osd_id=123)
|
||||||
|
_ceph_volume.assert_called_with('/dev/sdb', None, False, False,
|
||||||
|
'ceph', 123)
|
||||||
_check_call.assert_called_with(['ceph-volume', 'prepare'])
|
_check_call.assert_called_with(['ceph-volume', 'prepare'])
|
||||||
db.get.assert_called_with('osd-devices', [])
|
db.get.assert_called_with('osd-devices', [])
|
||||||
db.set.assert_called_with('osd-devices', ['/dev/sdb'])
|
db.set.assert_called_with('osd-devices', ['/dev/sdb'])
|
||||||
|
Loading…
Reference in New Issue
Block a user