diff options
author | Jakub Jelinek <jakub.jelinek@cern.ch> | 2022-08-16 12:36:46 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub.jelinek@cern.ch> | 2022-08-16 15:17:15 +0000 |
commit | 1ac61e1dbd11458ced58fb77e599ca88363b1b1b (patch) | |
tree | 059c3c3ea68f000f37d389e34617011dc930f901 | |
parent | 0212337bd564763eecb8f207ca31820497e27c26 (diff) | |
download | ironic-python-agent-1ac61e1dbd11458ced58fb77e599ca88363b1b1b.tar.gz |
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
-rw-r--r-- | doc/source/admin/hardware_managers.rst | 9 | ||||
-rw-r--r-- | 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): |