Merge "Enable find_disks module to match by filesystem label"
This commit is contained in:
commit
d54e7182e1
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user