Exemple #1
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        # create the single vg for all block.db lv's first
        vg_info = self.computed['vgs'][0]
        vg = lvm.create_vg(vg_info['devices'])

        # now produce all the block.db lvs needed from that single vg
        db_lvs = lvm.create_lvs(vg,
                                parts=vg_info['parts'],
                                name_prefix='osd-block-db')

        # create the data lvs, and create the OSD with the matching block.db lvs from before
        for osd in self.computed['osds']:
            vg = lvm.create_vg(osd['data']['path'])
            from uuid import uuid4
            data_lv = lvm.create_lv('osd-data-%s' % str(uuid4()), vg.name)
            db_lv = db_lvs.pop()
            # FIXME: no support for dmcrypt, crush class, etc...
            Create([
                '--bluestore', '--data',
                "%s/%s" % (data_lv.vg_name, data_lv.name), '--block.db',
                '%s/%s' % (db_lv.vg_name, db_lv.name)
            ]).main()
Exemple #2
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        osd_vgs = dict([(osd['data']['path'], None)
                        for osd in self.computed['osds']])

        # create the vgs first, mapping them to the device path
        for osd in self.computed['osds']:
            vg = osd_vgs.get(osd['data']['path'])
            if not vg:
                vg = lvm.create_vg(osd['data']['path'])
                osd_vgs[osd['data']['path']] = {
                    'vg': vg,
                    'parts': osd['data']['parts']
                }

        # create the lvs from the vgs captured in the beginning
        for create in osd_vgs.values():
            lvs = lvm.create_lvs(create['vg'],
                                 parts=create['parts'],
                                 name_prefix='osd-data')
            vg_name = create['vg'].name
            for lv in lvs:
                # FIXME: no support for dmcrypt, crush class, etc...
                Create([
                    '--bluestore',
                    '--data',
                    "%s/%s" % (vg_name, lv.name),
                ]).main()
Exemple #3
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        # create the single vg for all block.db lv's first
        vg_info = self.computed['vgs'][0]
        vg = lvm.create_vg(vg_info['devices'])

        # now produce all the block.db lvs needed from that single vg
        db_lvs = lvm.create_lvs(vg,
                                parts=vg_info['parts'],
                                name_prefix='osd-block-db')

        # create the data lvs, and create the OSD with the matching block.db lvs from before
        for osd in self.computed['osds']:
            vg = lvm.create_vg(osd['data']['path'])
            data_lv = lvm.create_lv('osd-data-%s' % str(uuid4()), vg.name)
            db_lv = db_lvs.pop()
            command = [
                '--bluestore', '--data',
                "%s/%s" % (data_lv.vg_name, data_lv.name), '--block.db',
                '%s/%s' % (db_lv.vg_name, db_lv.name)
            ]
            if self.args.dmcrypt:
                command.append('--dmcrypt')
            if self.args.no_systemd:
                command.append('--no-systemd')
            if self.args.crush_device_class:
                command.extend(
                    ['--crush-device-class', self.args.crush_device_class])

            Create(command).main()
Exemple #4
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        # create the single vg for all block.db lv's first
        vg_info = self.computed['vgs'][0]
        vg = lvm.create_vg(vg_info['devices'])

        # now produce all the block.db lvs needed from that single vg
        db_lvs = lvm.create_lvs(vg, parts=vg_info['parts'], name_prefix='osd-block-db')

        # create the data lvs, and create the OSD with the matching block.db lvs from before
        for osd in self.computed['osds']:
            vg = lvm.create_vg(osd['data']['path'])
            data_lv = lvm.create_lv('osd-data-%s' % str(uuid4()), vg.name)
            db_lv = db_lvs.pop()
            command = [
                '--bluestore',
                '--data', "%s/%s" % (data_lv.vg_name, data_lv.name),
                '--block.db', '%s/%s' % (db_lv.vg_name, db_lv.name)
            ]
            if self.args.dmcrypt:
                command.append('--dmcrypt')
            if self.args.no_systemd:
                command.append('--no-systemd')
            if self.args.crush_device_class:
                command.extend(['--crush-device-class', self.args.crush_device_class])

            Create(command).main()
Exemple #5
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        osd_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])

        # create the vgs first, mapping them to the device path
        for osd in self.computed['osds']:
            vg = osd_vgs.get(osd['data']['path'])
            if not vg:
                vg = lvm.create_vg(osd['data']['path'])
                osd_vgs[osd['data']['path']] = {'vg': vg, 'parts': osd['data']['parts']}

        # create the lvs from the vgs captured in the beginning
        for create in osd_vgs.values():
            lvs = lvm.create_lvs(create['vg'], parts=create['parts'], name_prefix='osd-data')
            vg_name = create['vg'].name
            for lv in lvs:
                # FIXME: no support for dmcrypt, crush class, etc...
                Create([
                    '--bluestore',
                    '--data', "%s/%s" % (vg_name, lv.name),
                ]).main()
Exemple #6
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        osd_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])

        # create the vgs first, mapping them to the device path
        for osd in self.computed['osds']:
            vg = osd_vgs.get(osd['data']['path'])
            if not vg:
                vg = lvm.create_vg(osd['data']['path'])
                osd_vgs[osd['data']['path']] = {'vg': vg, 'parts': osd['data']['parts']}

        # create the lvs from the vgs captured in the beginning
        for create in osd_vgs.values():
            lvs = lvm.create_lvs(create['vg'], parts=create['parts'], name_prefix='osd-data')
            vg_name = create['vg'].name
            for lv in lvs:
                command = ['--bluestore', '--data']
                command.append('%s/%s' % (vg_name, lv.name))
                if self.args.dmcrypt:
                    command.append('--dmcrypt')
                if self.args.no_systemd:
                    command.append('--no-systemd')
                if self.args.crush_device_class:
                    command.extend(['--crush-device-class', self.args.crush_device_class])

                if self.args.prepare:
                    Prepare(command).main()
                else:
                    Create(command).main()
Exemple #7
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        # create the single vg for all block.db lv's first
        vg_info = self.computed['vgs'][0]
        vg = lvm.create_vg(vg_info['devices'])

        # now produce all the block.db lvs needed from that single vg
        db_lvs = lvm.create_lvs(vg, parts=vg_info['parts'], name_prefix='osd-block-db')

        # create the data lvs, and create the OSD with the matching block.db lvs from before
        for osd in self.computed['osds']:
            vg = lvm.create_vg(osd['data']['path'])
            from uuid import uuid4
            data_lv = lvm.create_lv('osd-data-%s' % str(uuid4()), vg.name)
            db_lv = db_lvs.pop()
            # FIXME: no support for dmcrypt, crush class, etc...
            Create([
                '--bluestore',
                '--data', "%s/%s" % (data_lv.vg_name, data_lv.name),
                '--block.db', '%s/%s' % (db_lv.vg_name, db_lv.name)
            ]).main()
Exemple #8
0
    def execute(self):
        """
        Create vgs/lvs from the incoming set of devices, assign their roles
        (block, block.db, block.wal, etc..) and offload the OSD creation to
        ``lvm create``
        """
        osd_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])

        # create the vgs first, mapping them to the device path
        for osd in self.computed['osds']:
            vg = osd_vgs.get(osd['data']['path'])
            if not vg:
                vg = lvm.create_vg(osd['data']['path'])
                osd_vgs[osd['data']['path']] = {'vg': vg, 'parts': osd['data']['parts']}

        # create the lvs from the vgs captured in the beginning
        for create in osd_vgs.values():
            lvs = lvm.create_lvs(create['vg'], parts=create['parts'], name_prefix='osd-data')
            vg_name = create['vg'].name
            for lv in lvs:
                command = ['--bluestore', '--data']
                command.append('%s/%s' % (vg_name, lv.name))
                if self.args.dmcrypt:
                    command.append('--dmcrypt')
                if self.args.no_systemd:
                    command.append('--no-systemd')
                if self.args.crush_device_class:
                    command.extend(['--crush-device-class', self.args.crush_device_class])

                if self.args.prepare:
                    Prepare(command).main()
                else:
                    Create(command).main()
Exemple #9
0
 def test_fallback_to_one_part(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='999'
     )
     lvs = api.create_lvs(vg)
     assert len(lvs) == 1
Exemple #10
0
 def test_null_tags_are_set_by_default(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='999'
     )
     kwargs = api.create_lvs(vg, parts=4)[0][1]
     assert list(kwargs['tags'].values()) == ['null', 'null', 'null', 'null']
Exemple #11
0
 def test_only_uses_free_size(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='1000'
     )
     lvs = api.create_lvs(vg, parts=4)
     assert lvs[0][1]['extents'] == 250
Exemple #12
0
 def test_creates_correct_lv_number_from_parts(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='999'
     )
     lvs = api.create_lvs(vg, parts=4)
     assert len(lvs) == 4
Exemple #13
0
 def test_creates_correct_lv_number_from_parts(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='999'
     )
     lvs = api.create_lvs(vg, parts=4)
     assert len(lvs) == 4
Exemple #14
0
 def test_fallback_to_one_part(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='999'
     )
     lvs = api.create_lvs(vg)
     assert len(lvs) == 1
Exemple #15
0
 def test_null_tags_are_set_by_default(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='999'
     )
     kwargs = api.create_lvs(vg, parts=4)[0][1]
     assert list(kwargs['tags'].values()) == ['null', 'null', 'null', 'null']
Exemple #16
0
 def test_only_uses_free_size(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(
         vg_name='ceph', vg_free='1024g',
         vg_size='99999999g', vg_free_count='1000'
     )
     lvs = api.create_lvs(vg, parts=4)
     assert lvs[0][1]['extents'] == 250
Exemple #17
0
 def test_suffixes_the_size_arg(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw:
                         (a, kw))
     lvs = api.create_lvs(self.vg, parts=4)
     assert lvs[0][1]['extents'] == 249
Exemple #18
0
 def test_creates_correct_lv_number_from_parts(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw:
                         (a, kw))
     lvs = api.create_lvs(self.vg, parts=4)
     assert len(lvs) == 4
Exemple #19
0
 def test_suffixes_the_size_arg(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw:
                         (a, kw))
     vg = api.VolumeGroup(vg_name='ceph', vg_free='1024g')
     lvs = api.create_lvs(vg, parts=4)
     assert lvs[0][1]['size'] == '256g'
Exemple #20
0
 def test_null_tags_are_set_by_default(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw:
                         (a, kw))
     kwargs = api.create_lvs(self.vg, parts=4)[0][1]
     assert list(
         kwargs['tags'].values()) == ['null', 'null', 'null', 'null']
Exemple #21
0
 def test_fallback_to_one_part(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw:
                         (a, kw))
     lvs = api.create_lvs(self.vg)
     assert len(lvs) == 1
Exemple #22
0
 def test_suffixes_the_size_arg(self, monkeypatch):
     monkeypatch.setattr('ceph_volume.api.lvm.create_lv', lambda *a, **kw: (a, kw))
     vg = api.VolumeGroup(vg_name='ceph', vg_free='1024g')
     lvs = api.create_lvs(vg, parts=4)
     assert lvs[0][1]['size'] == '256g'