raise RuntimeError('unable to use device')
return uuid
- # TODO: get rid of this method?
- def get_lv(self, argument):
- """
- Perform some parsing of the command-line value so that the process
- can determine correctly if it got a device path or an lv.
-
- :param argument: The command-line value that will need to be split to
- retrieve the actual lv
- """
- #TODO is this efficient?
- try:
- vg_name, lv_name = argument.split('/')
- except (ValueError, AttributeError):
- return None
- return api.get_first_lv(filters={'lv_name': lv_name, 'vg_name':
- vg_name})
-
def setup_device(self, device_type, device_name, tags, size):
"""
Check if ``device`` is an lv, if so, set the tags, making sure to
return '', '', tags
tags['ceph.type'] = device_type
tags['ceph.vdo'] = api.is_vdo(device_name)
- lv = self.get_lv(device_name)
+
+ try:
+ vg_name, lv_name = device_name.split('/')
+ lv = api.get_first_lv(filters={'lv_name': lv_name,
+ 'vg_name': vg_name})
+ except ValueError:
+ lv = None
+
if lv:
uuid = lv.lv_uuid
path = lv.lv_path
"""
if args is not None:
self.args = args
- if api.is_ceph_device(self.get_lv(self.args.data)):
+
+ try:
+ vgname, lvname = self.args.data.split('/')
+ lv = api.get_first_lv(filters={'lv_name': lvname,
+ 'vg_name': vgname})
+ except ValueError:
+ lv = None
+
+ if api.is_ceph_device(lv):
logger.info("device {} is already used".format(self.args.data))
raise RuntimeError("skipping {}, it is already prepared".format(self.args.data))
try:
if not self.args.journal:
raise RuntimeError('--journal is required when using --filestore')
- data_lv = self.get_lv(self.args.data)
+ try:
+ vg_name, lv_name = self.args.data.split('/')
+ data_lv = api.get_first_lv(filters={'lv_name': lv_name,
+ 'vg_name': vg_name})
+ except ValueError:
+ data_lv = None
+
if not data_lv:
data_lv = self.prepare_data_device('data', osd_fsid)
osd_fsid,
)
elif self.args.bluestore:
- block_lv = self.get_lv(self.args.data)
+ try:
+ vg_name, lv_name = self.args.data.split('/')
+ block_lv = api.get_first_lv(filters={'lv_name': lv_name,
+ 'vg_name': vg_name})
+ except ValueError:
+ block_lv = None
+
if not block_lv:
block_lv = self.prepare_data_device('block', osd_fsid)
import pytest
-from ceph_volume.api import lvm as api
from ceph_volume.devices import lvm
from mock.mock import patch, Mock
expected = 'skipping {}, it is already prepared'.format('/dev/sdfoo')
assert expected in str(error.value)
-class TestGetJournalLV(object):
-
- @pytest.mark.parametrize('arg', ['', '///', None, '/dev/sda1'])
- def test_no_journal_on_invalid_path(self, monkeypatch, arg):
- monkeypatch.setattr(api, '_get_lv', lambda **kw: False)
- prepare = lvm.prepare.Prepare([])
- assert prepare.get_lv(arg) is None
-
- def test_no_journal_lv_found(self, monkeypatch):
- # patch it with 0 so we know we are getting to get_lv
- monkeypatch.setattr(api, '_get_lv', lambda **kw: 0)
- prepare = lvm.prepare.Prepare([])
- assert prepare.get_lv('vg/lv') == 0
-
-
class TestActivate(object):
def test_main_spits_help_with_no_arguments(self, capsys):