Create multiple Logical Volumes from a Volume Group by calculating the
proper extents from ``parts`` or ``size``. A custom prefix can be used
(defaults to ``ceph-lv``), these names are always suffixed with a uuid.
+
+ LV creation in ceph-volume will require tags, this is expected to be
+ pre-computed by callers who know Ceph metadata like OSD IDs and FSIDs. It
+ will probably not be the case when mass-creating LVs, so common/default tags will be
+ set to ``"null"``.
+
+ ceph.empty dict is
+
+ LVs that are not in use can be detected by querying LVM for tags that are
+ set to ``"null"``
+
+ :param group: The volume group (vg) to use for LV creation
+ :type group: ``VolumeGroup()`` object
+ :param parts: Number of LVs to create *instead of* ``size``.
+ :type parts: int
+ :param size: Size (in gigabytes) of LVs to create, e.g. "as many 10gb LVs as possible"
+ :type size: int
+
+ .. warning:: Only one of ``parts`` or ``size`` is allowed.
"""
if parts is None and size is None:
raise RuntimeError("Unable to create lvs without 'parts' or 'size' being defined")
lvs = []
+ tags = {
+ "ceph.osd_id": "null",
+ "ceph.type": "null",
+ "ceph.cluster_fsid": "null",
+ "ceph.osd_fsid": "null",
+ }
sizing = group.sizing(parts=parts, size=size)
for part in range(0, sizing['parts']):
size = sizing['sizes']
lv_name = '%s-%s' % (name_prefix, uuid.uuid4())
lvs.append(
- create_lv(lv_name, group.name, size="%sg" % size, tags={})
+ create_lv(lv_name, group.name, size="%sg" % size, tags=tags)
)
return lvs