aboutsummaryrefslogtreecommitdiff
path: root/docker/kolla-toolbox
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-03-21 14:17:23 +0000
committerGerrit Code Review <review@openstack.org>2016-03-21 14:17:24 +0000
commitff3095f56ec4ea7a60c044dffe048aaedbfaafe2 (patch)
tree8b0c131b84cac1fcc4151634a29a3b7398d06702 /docker/kolla-toolbox
parentb333f44a534374ac59a0e78960fc40f6cf6a6715 (diff)
parent5250a00781a214911fec78718ef6dfb91154b0de (diff)
downloadkolla-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.py84
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))