aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-01-29 12:58:08 +0000
committerGerrit Code Review <review@openstack.org>2016-01-29 12:58:08 +0000
commitd54e7182e16484178de96f6956e62238fbb8b0a9 (patch)
treefd6fdaf68edb3bb9a08bf8f911eb680c204f3f53
parentdcc372387642d8f301f765042da4e51e5267b9b2 (diff)
parent428b484397b20876599a336e7d56a4062d6c6922 (diff)
downloadkolla-d54e7182e16484178de96f6956e62238fbb8b0a9.tar.gz
kolla-d54e7182e16484178de96f6956e62238fbb8b0a9.zip
Merge "Enable find_disks module to match by filesystem label"
-rw-r--r--docker/kolla-ansible/find_disks.py76
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))