From 1ac61e1dbd11458ced58fb77e599ca88363b1b1b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 16 Aug 2022 12:36:46 +0000 Subject: Improve function list_block_devices_check_skip_list Fix minor issues suggested by dtantsur Add an example of skip list specification to the documentation A follow-up patch to I3bdad3cca8acb3e0a69ebb218216e8c8419e9d65 Change-Id: Ic94a33b7bc0572a1cc8f92b330474ec63a173e81 --- doc/source/admin/hardware_managers.rst | 9 ++++++--- ironic_python_agent/hardware.py | 36 +++++++++++++--------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/doc/source/admin/hardware_managers.rst b/doc/source/admin/hardware_managers.rst index ddc7dacf..6c72ba1a 100644 --- a/doc/source/admin/hardware_managers.rst +++ b/doc/source/admin/hardware_managers.rst @@ -113,10 +113,13 @@ unsafe conditions from occuring. Devices Skip List ~~~~~~~~~~~~~~~~~ -A list of devices that Ironic does not touch during the cleaning process -can be specified in the node properties field under +A list of devices that Ironic does not touch during the cleaning and deployment +process can be specified in the node properties field under ``skip_block_devices``. This should be a list of dictionaries -containing hints to identify the drives. +containing hints to identify the drives. For example:: + + 'skip_block_devices': [{'name': '/dev/vda', 'vendor': '0x1af4'}] + Shared Disk Cluster Filesystems ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py index 291b9b44..bb8c3c69 100644 --- a/ironic_python_agent/hardware.py +++ b/ironic_python_agent/hardware.py @@ -1396,28 +1396,20 @@ class GenericHardwareManager(HardwareManager): include_partitions=include_partitions) properties = node.get('properties', {}) skip_list_hints = properties.get("skip_block_devices", []) - if skip_list_hints is not None: - skip_list = None - serialized_devs = [dev.serialize() for dev in block_devices] - for hint in skip_list_hints: - found_devs = il_utils.find_devices_by_hints(serialized_devs, - hint) - excluded_devs = {dev['name'] for dev in found_devs} - skipped_devices = None - if skip_list is None: - skip_list = excluded_devs - skipped_devices = excluded_devs - else: - skipped_devices = excluded_devs.difference(skip_list) - skip_list = skip_list.union(excluded_devs) - if skipped_devices is not None and len(skipped_devices) > 0: - for d in skipped_devices: - LOG.warning("Skipping device %(device)s " - "using hint %(hint)s", - {'device': d, 'hint': hint}) - if skip_list is not None: - block_devices = [d for d in block_devices - if d.name not in skip_list] + if not skip_list_hints: + return block_devices + skip_list = set() + serialized_devs = [dev.serialize() for dev in block_devices] + for hint in skip_list_hints: + found_devs = il_utils.find_devices_by_hints(serialized_devs, hint) + excluded_devs = {dev['name'] for dev in found_devs} + skipped_devices = excluded_devs.difference(skip_list) + skip_list = skip_list.union(excluded_devs) + if skipped_devices: + LOG.warning("Using hint %(hint)s skipping devices: %(devs)s", + {'hint': hint, 'devs': ','.join(skipped_devices)}) + block_devices = [d for d in block_devices + if d.name not in skip_list] return block_devices def get_os_install_device(self, permit_refresh=False): -- cgit v1.2.1