diff options
| author | Jenkins <jenkins@review.openstack.org> | 2016-03-21 14:17:23 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2016-03-21 14:17:24 +0000 |
| commit | ff3095f56ec4ea7a60c044dffe048aaedbfaafe2 (patch) | |
| tree | 8b0c131b84cac1fcc4151634a29a3b7398d06702 /docker/kolla-toolbox | |
| parent | b333f44a534374ac59a0e78960fc40f6cf6a6715 (diff) | |
| parent | 5250a00781a214911fec78718ef6dfb91154b0de (diff) | |
| download | kolla-ff3095f56ec4ea7a60c044dffe048aaedbfaafe2.tar.gz kolla-ff3095f56ec4ea7a60c044dffe048aaedbfaafe2.zip | |
Merge "Allow external ceph journals and fix bootstrap"
Diffstat (limited to 'docker/kolla-toolbox')
| -rw-r--r-- | docker/kolla-toolbox/find_disks.py | 84 |
1 files changed, 60 insertions, 24 deletions
diff --git a/docker/kolla-toolbox/find_disks.py b/docker/kolla-toolbox/find_disks.py index 6ebf2b6a2..e72dcc6fb 100644 --- a/docker/kolla-toolbox/find_disks.py +++ b/docker/kolla-toolbox/find_disks.py @@ -66,6 +66,61 @@ EXAMPLES = ''' import json import pyudev +import re + + +def is_dev_matched_by_name(dev, name, mode): + if dev.get('DEVTYPE', '') == 'partition': + dev_name = dev.get('ID_PART_ENTRY_NAME', '') + else: + dev_name = dev.get('ID_FS_LABEL', '') + + if mode == 'strict': + return dev_name == name + elif mode == 'prefix': + return dev_name.startswith(name) + else: + return False + + +def find_disk(ct, name, match_mode): + for dev in ct.list_devices(subsystem='block'): + if is_dev_matched_by_name(dev, name, match_mode): + yield dev + + +def extract_disk_info(ct, dev, name): + if not dev: + return + kwargs = dict() + kwargs['fs_uuid'] = dev.get('ID_FS_UUID', '') + kwargs['fs_label'] = dev.get('ID_FS_LABEL', '') + if dev.get('DEVTYPE', '') == 'partition': + kwargs['device'] = dev.find_parent('block').device_node + kwargs['partition'] = dev.device_node + kwargs['partition_num'] = \ + re.sub(r'.*[^\d$]', '', dev.device_node) + if is_dev_matched_by_name(dev, name, 'strict'): + kwargs['external_journal'] = False + kwargs['journal'] = dev.device_node[:-1] + '2' + kwargs['journal_device'] = kwargs['device'] + kwargs['journal_num'] = 2 + else: + kwargs['external_journal'] = True + journal_name = dev.get('ID_PART_ENTRY_NAME', '') + '_J' + for journal in find_disk(ct, journal_name, 'strict'): + kwargs['journal'] = journal.device_node + kwargs['journal_device'] = \ + journal.find_parent('block').device_node + kwargs['journal_num'] = \ + re.sub(r'.*[^\d$]', '', journal.device_node) + break + if 'journal' not in kwargs: + # NOTE(SamYaple): Journal not found, not returning info + return + else: + kwargs['device'] = dev.device_node + yield kwargs def main(): @@ -78,33 +133,14 @@ def main(): match_mode = module.params.get('match_mode') name = module.params.get('name') - def is_dev_matched_by_name(dev, name): - if dev.get('DEVTYPE', '') == 'partition': - dev_name = dev.get('ID_PART_ENTRY_NAME', '') - else: - dev_name = dev.get('ID_FS_LABEL', '') - - if match_mode == 'strict': - return dev_name == name - elif match_mode == 'prefix': - return dev_name.startswith(name) - else: - return False - try: ret = list() ct = pyudev.Context() - for dev in ct.list_devices(subsystem='block'): - if is_dev_matched_by_name(dev, name): - fs_uuid = dev.get('ID_FS_UUID', '') - fs_label = dev.get('ID_FS_LABEL', '') - if dev.get('DEVTYPE', '') == 'partition': - device_node = dev.find_parent('block').device_node - else: - device_node = dev.device_node - ret.append({'device': device_node, - 'fs_uuid': fs_uuid, - 'fs_label': fs_label}) + for dev in find_disk(ct, name, match_mode): + for info in extract_disk_info(ct, dev, name): + if info: + ret.append(info) + module.exit_json(disks=json.dumps(ret)) except Exception as e: module.exit_json(failed=True, msg=repr(e)) |
