diff options
| author | Jenkins <jenkins@review.openstack.org> | 2016-01-29 12:58:08 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2016-01-29 12:58:08 +0000 |
| commit | d54e7182e16484178de96f6956e62238fbb8b0a9 (patch) | |
| tree | fd6fdaf68edb3bb9a08bf8f911eb680c204f3f53 /docker | |
| parent | dcc372387642d8f301f765042da4e51e5267b9b2 (diff) | |
| parent | 428b484397b20876599a336e7d56a4062d6c6922 (diff) | |
| download | kolla-d54e7182e16484178de96f6956e62238fbb8b0a9.tar.gz kolla-d54e7182e16484178de96f6956e62238fbb8b0a9.zip | |
Merge "Enable find_disks module to match by filesystem label"
Diffstat (limited to 'docker')
| -rw-r--r-- | docker/kolla-ansible/find_disks.py | 76 |
1 files changed, 59 insertions, 17 deletions
diff --git a/docker/kolla-ansible/find_disks.py b/docker/kolla-ansible/find_disks.py index d5761ceb0..6ebf2b6a2 100644 --- a/docker/kolla-ansible/find_disks.py +++ b/docker/kolla-ansible/find_disks.py @@ -20,16 +20,24 @@ DOCUMENTATION = ''' --- module: find_disks -short_description: Return list of devices containing a specfied label +short_description: Return list of devices containing a specfied name or label description: - - This will return a list of all devices with a GPT partition label with - the name specified. + - This will return a list of all devices with either GPT partition name + or filesystem label of the name specified. options: - partition_name: + match_mode: description: - - Partition name + - Label match mode, either strict or prefix + default: 'strict' + required: False + choices: [ "strict", "prefix" ] + type: str + name: + description: + - Partition name or filesystem label required: True - type: bool + type: str + aliases: [ 'partition_name' ] author: Sam Yaple ''' @@ -37,9 +45,23 @@ EXAMPLES = ''' - hosts: ceph-osd tasks: - name: Return all valid formated devices with the name KOLLA_CEPH_OSD - ceph_osd_list: - partition_name: 'KOLLA_CEPH_OSD' + find_disks: + name: 'KOLLA_CEPH_OSD' register: osds + +- hosts: swift-object-server + tasks: + - name: Return all valid devices with the name KOLLA_SWIFT + find_disks: + name: 'KOLLA_SWIFT' + register: swift_disks + +- hosts: swift-object-server + tasks: + - name: Return all valid devices with wildcard name 'swift_d*' + find_disks: + name: 'swift_d' match_mode: 'prefix' + register: swift_disks ''' import json @@ -48,21 +70,41 @@ import pyudev def main(): argument_spec = dict( - partition_name=dict(required=True, type='str') + match_mode=dict(required=False, choices=['strict', 'prefix'], + default='strict'), + name=dict(aliases=['partition_name'], required=True, type='str') ) module = AnsibleModule(argument_spec) - partition_name = module.params.get('partition_name') + 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', DEVTYPE='partition'): - if dev.get('ID_PART_ENTRY_NAME') == partition_name: - fs_uuid = dev.get('ID_FS_UUID') - if not fs_uuid: - fs_uuid = '' - dev_parent = dev.find_parent('block').device_node - ret.append({'device': dev_parent, 'fs_uuid': fs_uuid}) + 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}) module.exit_json(disks=json.dumps(ret)) except Exception as e: module.exit_json(failed=True, msg=repr(e)) |
