def parse_partition_info(parted_output): lines = parted_output.split('\n') generic_params = lines[1].rstrip(';').split(':') generic = { 'dev': generic_params[0], 'size': utils.parse_unit(generic_params[1], 'MiB'), 'logical_block': int(generic_params[3]), 'physical_block': int(generic_params[4]), 'table': generic_params[5], 'model': generic_params[6] } parts = [] for line in lines[2:]: line = line.strip().rstrip(';') if not line: continue part_params = line.split(':') part = { 'disk_dev': generic['dev'], 'name': "%s%s" % (generic['dev'], int(part_params[0])), 'num': int(part_params[0]), 'begin': utils.parse_unit(part_params[1], 'MiB'), 'end': utils.parse_unit(part_params[2], 'MiB'), 'size': utils.parse_unit(part_params[3], 'MiB'), 'fstype': part_params[4] or None, 'type': None, 'flags': [] } if part['fstype'] != 'free': part['type'] = part_params[5] or None part['flags'] = [f for f in part_params[6].split(', ') if f] parts.append(part) return {'generic': generic, 'parts': parts}
def vgdisplay_parse(output): vgs = [] for line in output.split('\n'): line = line.strip() if not line: continue vg_params = line.split(';') vgs.append({ 'name': vg_params[0], 'uuid': vg_params[1], 'size': utils.parse_unit(vg_params[2], 'm'), 'free': utils.parse_unit(vg_params[3], 'm', ceil=False) }) LOG.debug('Found volume groups: {0}'.format(vgs)) return vgs
def pvdisplay_parse(output): pvs = [] for line in output.split('\n'): line = line.strip() if not line: continue pv_params = line.split(';') pvs.append({ 'name': pv_params[0], 'vg': pv_params[1] or None, 'psize': utils.parse_unit(pv_params[2], 'm'), 'devsize': utils.parse_unit(pv_params[3], 'm'), 'uuid': pv_params[4] }) LOG.debug('Found physical volumes: {0}'.format(pvs)) return pvs
def test_parse_unit(self): self.assertEqual(utils.parse_unit("1.00m", "m", ceil=True), 1) self.assertEqual(utils.parse_unit("1.00m", "m", ceil=False), 1) self.assertEqual(utils.parse_unit("1.49m", "m", ceil=True), 2) self.assertEqual(utils.parse_unit("1.49m", "m", ceil=False), 1) self.assertEqual(utils.parse_unit("1.51m", "m", ceil=True), 2) self.assertEqual(utils.parse_unit("1.51m", "m", ceil=False), 1) self.assertRaises(ValueError, utils.parse_unit, "1.00m", "MiB") self.assertRaises(ValueError, utils.parse_unit, "", "MiB")
def test_parse_unit(self): self.assertEqual(utils.parse_unit('1.00m', 'm', ceil=True), 1) self.assertEqual(utils.parse_unit('1.00m', 'm', ceil=False), 1) self.assertEqual(utils.parse_unit('1.49m', 'm', ceil=True), 2) self.assertEqual(utils.parse_unit('1.49m', 'm', ceil=False), 1) self.assertEqual(utils.parse_unit('1.51m', 'm', ceil=True), 2) self.assertEqual(utils.parse_unit('1.51m', 'm', ceil=False), 1) self.assertRaises(ValueError, utils.parse_unit, '1.00m', 'MiB') self.assertRaises(ValueError, utils.parse_unit, '', 'MiB')
def lvdisplay_parse(output): lvs = [] for line in output.split('\n'): line = line.strip() if not line: continue lv_params = line.split(';') lvs.append({ 'name': lv_params[0], 'size': utils.parse_unit(lv_params[1], 'm'), 'vg': lv_params[2], 'uuid': lv_params[3], # NOTE(agordeev): simulate lv_path with '/dev/$vg_name/$lv_name' 'path': '/dev/%s/%s' % (lv_params[2], lv_params[0]) }) LOG.debug('Found logical volumes: {0}'.format(lvs)) return lvs