]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/ceph-volume/ceph_volume/devices/lvm/prepare.py
import 15.2.5
[ceph.git] / ceph / src / ceph-volume / ceph_volume / devices / lvm / prepare.py
index 4db8532806a999f59bc617e432d1981e6773efc4..26ea2bf2198ea1fa258ec997f23dbb22ab6fdd74 100644 (file)
@@ -135,21 +135,6 @@ class Prepare(object):
             raise RuntimeError('unable to use device')
         return uuid
 
-    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_lv(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
@@ -163,7 +148,14 @@ class Prepare(object):
             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
@@ -239,7 +231,15 @@ class Prepare(object):
         """
         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:
@@ -298,7 +298,13 @@ class Prepare(object):
             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)
 
@@ -323,7 +329,13 @@ class Prepare(object):
                 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)