Re: Deterministic naming of LVM volumes (ceph-volume)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13-12-2017 10:36, Stefan Kooman wrote:
> Hi,
> 
> The new style "ceph-volume" LVM way of provisioning OSDs introduces a
> little challange for us. In order to create the OSDs as logical,
> consistent and easily recognizable as possible, we try to name the
> Volume Groups (VG) and Logical Volumes (LV) the same as the OSD. For
> example: OSD no. 12 will be named /dev/osd.12/osd.12. So we don't use:
> 
> "ceph-volume lvm create /dev/device" 
> 
> but use:
> 
> "ceph-volume lvm prepare --bluestore --data osd.$OSD_ID/osd.$OSD_ID"
> 
> and 
> 
> "ceph-volume lvm activate --bluestore $OSD_ID $OSD_FSID" 
> 
> However, this way of provisioning requires to know the OSD_ID before
> creating the VG/LV. Is there a way to ask Ceph which OSD_ID
> would be next up?

Stephan,

The ceph-disk code does something like this:

def allocate_osd_id(
    cluster,
    fsid,
    keyring,
    path,
):
    """
    Allocates an OSD id on the given cluster.

    :raises: Error if the call to allocate the OSD id fails.
    :return: The allocated OSD id.
    """
    lockbox_path = os.path.join(STATEDIR, 'osd-lockbox', fsid)
    lockbox_osd_id = read_one_line(lockbox_path, 'whoami')
    osd_keyring = os.path.join(path, 'keyring')
    if lockbox_osd_id:
        LOG.debug('Getting OSD id from Lockbox...')
        osd_id = lockbox_osd_id
        shutil.move(os.path.join(lockbox_path, 'osd_keyring'),
                    osd_keyring)
        path_set_context(osd_keyring)
        os.unlink(os.path.join(lockbox_path, 'whoami'))
        return osd_id

    LOG.debug('Allocating OSD id...')
    secrets = Secrets()
    try:
        wanttobe = read_one_line(path, 'wanttobe')
        if os.path.exists(os.path.join(path, 'wanttobe')):
            os.unlink(os.path.join(path, 'wanttobe'))
        id_arg = wanttobe and [wanttobe] or []
        osd_id = command_with_stdin(
            [
                'ceph',
                '--cluster', cluster,
                '--name', 'client.bootstrap-osd',
                '--keyring', keyring,
                '-i', '-',
                'osd', 'new',
                fsid,
            ] + id_arg,
            secrets.get_json()
        )
    except subprocess.CalledProcessError as e:
        raise Error('ceph osd create failed', e, e.output)
    osd_id = must_be_one_line(osd_id)
    check_osd_id(osd_id)
    secrets.write_osd_keyring(osd_keyring, osd_id)
    return osd_id


--WjW


_______________________________________________
ceph-users mailing list
ceph-users@xxxxxxxxxxxxxx
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com



[Index of Archives]     [Information on CEPH]     [Linux Filesystem Development]     [Ceph Development]     [Ceph Large]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [xfs]


  Powered by Linux