diff --git a/doc/source/admin/hardware_managers.rst b/doc/source/admin/hardware_managers.rst index e161ca77d..065d25853 100644 --- a/doc/source/admin/hardware_managers.rst +++ b/doc/source/admin/hardware_managers.rst @@ -147,7 +147,7 @@ to be used. .. NOTE:: The Ironic Developers chose to limit the items available for service steps - such that the risk of data distruction is generally minimized. + such that the risk of data destruction is generally minimized. That being said, it could be reasonable to reconfigure RAID devices through local hardware managers *or* to write the base OS image as part of a service operation. As such, caution should be taken, and if additional data @@ -160,7 +160,7 @@ Cleaning safeguards ------------------- The stock hardware manager contains a number of safeguards to prevent -unsafe conditions from occuring. +unsafe conditions from occurring. Devices Skip List ~~~~~~~~~~~~~~~~~ diff --git a/doc/source/admin/how_it_works.rst b/doc/source/admin/how_it_works.rst index 831013264..80c34231d 100644 --- a/doc/source/admin/how_it_works.rst +++ b/doc/source/admin/how_it_works.rst @@ -245,7 +245,7 @@ We also support determining the checksum by length. The field can be utilized to designate: -* A URL to retreive a checksum from. +* A URL to retrieve a checksum from. * MD5 (Disabled by default, see ``[DEFAULT]md5_enabled`` in the agent configuration file.) * SHA-2 based SHA256 diff --git a/doc/source/admin/troubleshooting.rst b/doc/source/admin/troubleshooting.rst index dba014115..dbd5e5296 100644 --- a/doc/source/admin/troubleshooting.rst +++ b/doc/source/admin/troubleshooting.rst @@ -189,7 +189,8 @@ Cleaning halted with ProtectedDeviceError The IPA service has halted cleaning as one of the block devices within or attached to the bare metal node contains a class of filesystem which **MAY** -cause irreparable harm to a potentially running cluster if accidently removed. +cause irreparable harm to a potentially running cluster if accidentally +removed. These filesystems *may* be used for only local storage and as a result be safe to erase. However if a shared block device is in use, such as a device diff --git a/doc/source/contributor/rescue.rst b/doc/source/contributor/rescue.rst index e89194385..950b8d9f0 100644 --- a/doc/source/contributor/rescue.rst +++ b/doc/source/contributor/rescue.rst @@ -39,7 +39,7 @@ Upon success, it returns following data in response:: If successful, this synchronous command will: -1. Write the salted and crypted ``rescue_password`` to +1. Write the salted and encrypted ``rescue_password`` to ``/etc/ipa-rescue-config/ipa-rescue-password`` in the chroot or filesystem that ironic-python-agent is running in. diff --git a/examples/vendor-device/example_device.py b/examples/vendor-device/example_device.py index 0f06a5f6e..a9a21c7d8 100644 --- a/examples/vendor-device/example_device.py +++ b/examples/vendor-device/example_device.py @@ -22,7 +22,7 @@ LOG = log.getLogger() # All the helper methods should be kept outside of the HardwareManager # so they'll never get accidentally called by dispatch_to_managers() def _initialize_hardware(): - """Example method for initalizing hardware.""" + """Example method for initializing hardware.""" # Perform any operations here that are required to initialize your # hardware. LOG.debug('Loading drivers, settling udevs, and generally initalizing') @@ -64,7 +64,7 @@ class ExampleDeviceHardwareManager(hardware.HardwareManager): """Declare level of hardware support provided. Since this example covers a case of supporting a specific device, - this method is where you would do anything needed to initalize that + this method is where you would do anything needed to initialize that device, including loading drivers, and then detect if one exists. In some cases, if you expect the hardware to be available on any node diff --git a/ironic_python_agent/errors.py b/ironic_python_agent/errors.py index a3c1c7d56..d004e90b3 100644 --- a/ironic_python_agent/errors.py +++ b/ironic_python_agent/errors.py @@ -350,7 +350,7 @@ class ClockSyncError(RESTError): class HeartbeatConnectionError(IronicAPIError): - """Transitory connection failure occured attempting to contact the API.""" + """Transitory connection failure occurred attempting to contact the API.""" message = ("Error attempting to heartbeat - Possible transitory network " "failure or blocking port may be present.") diff --git a/ironic_python_agent/extensions/image.py b/ironic_python_agent/extensions/image.py index 46be48c2a..ed9f5bf6d 100644 --- a/ironic_python_agent/extensions/image.py +++ b/ironic_python_agent/extensions/image.py @@ -137,7 +137,7 @@ def _mount_partition(partition, path): # NOTE(TheJulia): It seems in some cases, # the python os.path.ismount can return False # even *if* it is actually mounted. This appears - # to be becasue it tries to rely on inode on device + # to be because it tries to rely on inode on device # logic, yet the rules are sometimes different inside # ramdisks. So lets check the error first. if 'already mounted' not in e: @@ -436,13 +436,12 @@ def _try_preserve_efi_assets(device, path, efi_partition_mount_point): """Attempt to preserve UEFI boot assets. - :param device: The device upon which wich to try to preserve - assets. + :param device: The device upon which to try to preserve assets. :param path: The path in which the filesystem is already mounted which we should examine to preserve assets from. :param efi_system_part_uuid: The partition ID representing the created EFI system partition. - :param efi_partition: The partitions upon wich to write the preserved + :param efi_partition: The partitions upon which to write the preserved assets to. :param efi_partition_mount_point: The folder at which to mount the assets for the process of @@ -450,7 +449,7 @@ def _try_preserve_efi_assets(device, path, :returns: True if assets have been preserved, otherwise False. None is the result of this method if a failure has - occured. + occurred. """ efi_assets_folder = efi_partition_mount_point + '/EFI' if os.path.exists(efi_assets_folder): @@ -459,7 +458,7 @@ def _try_preserve_efi_assets(device, path, # True from _preserve_efi_assets to correspond with success or # failure in this action. # NOTE(TheJulia): Still makes sense to invoke grub-install as - # fragmentation of grub has occured. + # fragmentation of grub has occurred. if (os.path.exists(os.path.join(path, 'usr/sbin/grub2-install')) or os.path.exists(os.path.join(path, 'usr/sbin/grub-install'))): _configure_grub(device, path) @@ -592,7 +591,7 @@ def _preserve_efi_assets(path, efi_assets_folder, efi_partition, :param efi_assets_folder: The folder where we can find the UEFI assets required for booting. :param efi_partition: The partition upon which to write the - perserved assets to. + preserved assets to. :param efi_partition_mount_point: The folder at which to mount the assets for the process of preservation. @@ -629,7 +628,7 @@ def _preserve_efi_assets(path, efi_assets_folder, efi_partition, # NOTE(TheJulia): By saving the default, this file should be created. # this appears to what diskimage-builder does. # if the file is just a file, then we'll need to copy it. If it is - # anything else like a link, we're good. This behaivor is inconsistent + # anything else like a link, we're good. This behavior is inconsistent # depending on packager install scripts for grub. if os.path.isfile(grub2_env_file): LOG.debug('Detected grub environment file %s, will attempt ' @@ -685,7 +684,7 @@ class ImageExtension(base.BaseAgentExtension): Used only for booting ppc64* partition images locally. In this scenario the bootloader will be installed here. :param target_boot_mode: bios, uefi. Only taken into account - for softraid, when no efi partition is explicitely provided + for softraid, when no efi partition is explicitly provided (happens for whole disk images) :raises: CommandExecutionError if the installation of the bootloader fails. diff --git a/ironic_python_agent/extensions/standby.py b/ironic_python_agent/extensions/standby.py index c7db614b4..14b1d1223 100644 --- a/ironic_python_agent/extensions/standby.py +++ b/ironic_python_agent/extensions/standby.py @@ -415,7 +415,7 @@ def _get_algorithm_by_length(checksum): :param checksum: The requested checksum. :returns: A hashlib object based upon the checksum - or ValueError if the algorthm could not be + or ValueError if the algorithm could not be identified. """ # NOTE(TheJulia): This is all based on SHA-2 lengths. @@ -462,7 +462,7 @@ class ImageDownload(object): def __init__(self, image_info, time_obj=None): """Initialize an instance of the ImageDownload class. - Trys each URL in image_info successively until a URL returns a + Tries each URL in image_info successively until a URL returns a successful request code. Once the object is initialized, the user may retrieve chunks of the image through the standard python iterator interface until either the image is fully downloaded, or an error is @@ -500,7 +500,7 @@ class ImageDownload(object): image_info) retrieved_checksum = True if not algo: - # Override algorithm not suppied as os_hash_algo + # Override algorithm not supplied as os_hash_algo self._hash_algo = _get_algorithm_by_length( self._expected_hash_value) elif checksum: @@ -510,7 +510,7 @@ class ImageDownload(object): if not new_algo: # Realistically, this should never happen, but for - # compatability... + # compatibility... # TODO(TheJulia): Remove for a 2024 release. self._hash_algo = hashlib.new('md5') # nosec else: @@ -676,7 +676,7 @@ def _download_image(image_info): totaltime = time.time() - starttime LOG.info("Image downloaded from %(image_location)s " "in %(totaltime)s seconds. Transferred %(size)s bytes. " - "Server originaly reported: %(reported)s.", + "Server originally reported: %(reported)s.", {'image_location': image_location, 'totaltime': totaltime, 'size': image_download.bytes_transferred, @@ -854,7 +854,7 @@ class StandbyExtension(base.BaseAgentExtension): totaltime = time.time() - starttime LOG.info("Image streamed onto device %(device)s in %(totaltime)s " - "seconds for %(size)s bytes. Server originaly reported " + "seconds for %(size)s bytes. Server originally reported " "%(reported)s.", {'device': device, 'totaltime': totaltime, 'size': image_download.bytes_transferred, diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py index 95faabca2..281fa8c09 100644 --- a/ironic_python_agent/hardware.py +++ b/ironic_python_agent/hardware.py @@ -703,7 +703,7 @@ def list_all_block_devices(block_type='disk', def save_api_client(client=None, timeout=None, interval=None): - """Preserves access to the API client for potential later re-use.""" + """Preserves access to the API client for potential later reuse.""" global API_CLIENT, API_LOOKUP_TIMEOUT, API_LOOKUP_INTERVAL if client and timeout and interval and not API_CLIENT: @@ -713,7 +713,7 @@ def save_api_client(client=None, timeout=None, interval=None): def update_cached_node(): - """Attmepts to update the node cache via the API""" + """Attempts to update the node cache via the API""" cached_node = get_cached_node() if API_CLIENT: LOG.info('Agent is requesting to perform an explicit node cache ' @@ -1165,7 +1165,7 @@ class HardwareManager(object, metaclass=abc.ABCMeta): 'interface': the name of the driver interface that should execute the step. 'step': the HardwareManager function to call. - 'priority': the order steps will be run in if excuted upon + 'priority': the order steps will be run in if executed upon similar to automated cleaning or deployment. In service steps, the order comes from the user request, but this similarity is kept for consistency should we @@ -2296,7 +2296,7 @@ class GenericHardwareManager(HardwareManager): :return: IPv6 address of lan channel or ::/0 in case none of them is configured properly. May return None value if it cannot - interract with system tools or critical error occurs. + interact with system tools or critical error occurs. """ null_address_re = re.compile(r'^::(/\d{1,3})*$') @@ -2313,9 +2313,9 @@ class GenericHardwareManager(HardwareManager): # dynamic_addr and static_addr commands is a valid yaml. try: out = yaml.safe_load(out.strip()) - except yaml.YAMLError as excpt: + except yaml.YAMLError as ex: LOG.warning('Cannot process output of "%(cmd)s" ' - 'command: %(e)s', {'cmd': cmd, 'e': excpt}) + 'command: %(e)s', {'cmd': cmd, 'e': ex}) return for addr_dict in out.values(): @@ -2498,8 +2498,8 @@ class GenericHardwareManager(HardwareManager): 'reboot_requested': False, 'abortable': True }, - # NOTE(TheJulia): Burnin disk is explicilty not carried in this - # list because it would be distructive to data on a disk. + # NOTE(TheJulia): Burnin disk is explicitly not carried in this + # list because it would be destructive to data on a disk. # If someone needs to do that, the machine should be # unprovisioned. { @@ -3420,16 +3420,16 @@ def get_multipath_status(): def safety_check_block_device(node, device): """Performs safety checking of a block device before destroying. - In order to guard against distruction of file systems such as + In order to guard against destruction of file systems such as shared-disk file systems (https://en.wikipedia.org/wiki/Clustered_file_system#SHARED-DISK) or similar filesystems where multiple distinct computers may have unlocked concurrent IO access to the entire block device or SAN Logical Unit Number, we need to evaluate, and block cleaning - from occuring on these filesystems *unless* we have been explicitly + from occurring on these filesystems *unless* we have been explicitly configured to do so. - This is because cleaning is an intentionally distructive operation, + This is because cleaning is an intentionally destructive operation, and once started against such a device, given the complexities of shared disk clustered filesystems where concurrent access is a design element, in all likelihood the entire cluster can be negatively @@ -3487,7 +3487,7 @@ def safety_check_block_device(node, device): def _check_for_special_partitions_filesystems(device, ids, fs_types): """Compare supplied IDs, Types to known items, and raise if found. - :param device: The block device in use, specificially for logging. + :param device: The block device in use, specifically for logging. :param ids: A list above IDs found to check. :param fs_types: A list of FS types found to check. :raises: ProtectedDeviceError should a partition label or metadata diff --git a/ironic_python_agent/inspect.py b/ironic_python_agent/inspect.py index 17a6b91d3..bdd1e4578 100644 --- a/ironic_python_agent/inspect.py +++ b/ironic_python_agent/inspect.py @@ -101,7 +101,7 @@ class IronicInspection(threading.Thread): self.max_delay) except Exception as e: # General failure such as requests ConnectionError - LOG.error('Error occured attempting to connect to ' + LOG.error('Error occurred attempting to connect to ' 'connect to the introspection service. ' 'Error: %(err)s', {'err': e}) diff --git a/ironic_python_agent/ironic_api_client.py b/ironic_python_agent/ironic_api_client.py index 35f5636a4..614fa20c5 100644 --- a/ironic_python_agent/ironic_api_client.py +++ b/ironic_python_agent/ironic_api_client.py @@ -231,10 +231,10 @@ class APIClient(object): msg = ('Unhandled error looking up node with addresses {} at ' '{}: {}'.format(params['addresses'], self.api_url, err)) # No matter what we do at this point, IPA is going to exit. - # This is because we don't know why the exception occured and + # This is because we don't know why the exception occurred and # we likely should not try to retry as such. # We will attempt to provide as much detail to the logs as - # possible as to what occured, although depending on the logging + # possible as to what occurred, although depending on the logging # subsystem, additional errors can occur, thus the additional # handling below. try: @@ -242,7 +242,7 @@ class APIClient(object): return False except Exception as exc_err: LOG.error(msg) - exc_msg = ('Unexpected exception occured while trying to ' + exc_msg = ('Unexpected exception occurred while trying to ' 'log additional detail. Error: {}'.format(exc_err)) LOG.error(exc_msg) raise errors.LookupNodeError(msg) diff --git a/ironic_python_agent/partition_utils.py b/ironic_python_agent/partition_utils.py index 0e1a0c118..bfc01c9cb 100644 --- a/ironic_python_agent/partition_utils.py +++ b/ironic_python_agent/partition_utils.py @@ -562,7 +562,7 @@ def _try_build_fat32_config_drive(partition, confdrive_file): # config drive, nor could we recover the state. LOG.error('We were unable to make a new filesystem for the ' 'configuration drive. Error: %s', e) - msg = ('A failure occured while attempting to format, copy, and ' + msg = ('A failure occurred while attempting to format, copy, and ' 're-create the configuration drive in a structure which ' 'is compatible with the underlying hardware and Operating ' 'System. Due to the nature of configuration drive, it could ' diff --git a/ironic_python_agent/raid_utils.py b/ironic_python_agent/raid_utils.py index 27b0bb5b2..8f3be1858 100644 --- a/ironic_python_agent/raid_utils.py +++ b/ironic_python_agent/raid_utils.py @@ -128,7 +128,7 @@ def calc_raid_partition_sectors(psize, start): the unit of measure, compatible with parted. :param psize: size of the raid partition - :param start: start sector of the raid partion in integer format + :param start: start sector of the raid partition in integer format :return: start and end sector in parted compatible format, end sector as integer """ diff --git a/ironic_python_agent/tests/unit/extensions/test_image.py b/ironic_python_agent/tests/unit/extensions/test_image.py index 2bfa782cf..7010bd369 100644 --- a/ironic_python_agent/tests/unit/extensions/test_image.py +++ b/ironic_python_agent/tests/unit/extensions/test_image.py @@ -389,7 +389,7 @@ Boot0002 VENDMAGIC FvFile(9f3c6294-bf9b-4208-9808-be45dfc34b51) mock_efi_bl.return_value = ['EFI/BOOT/BOOTX64.EFI'] # NOTE(TheJulia): This test string was derived from a lenovo SR650 # which does do some weird things with additional entries. - # most notabley + # most notably stdout_msg = """ BootCurrent: 0000 Timeout: 1 seconds diff --git a/ironic_python_agent/tests/unit/extensions/test_service.py b/ironic_python_agent/tests/unit/extensions/test_service.py index 6d7036c4f..fd2e4d2b2 100644 --- a/ironic_python_agent/tests/unit/extensions/test_service.py +++ b/ironic_python_agent/tests/unit/extensions/test_service.py @@ -293,7 +293,7 @@ class TestServiceExtension(base.IronicAgentTest): ports=self.ports, service_version=self.version) async_result.join() # NOTE(TheJulia): This remains CLEAN_VERSION_MISMATCH for backwards - # compatability with base.py and API consumers. + # compatibility with base.py and API consumers. self.assertEqual('CLEAN_VERSION_MISMATCH', async_result.command_status) diff --git a/ironic_python_agent/tests/unit/extensions/test_standby.py b/ironic_python_agent/tests/unit/extensions/test_standby.py index ea4d9a26c..dda3e7ce7 100644 --- a/ironic_python_agent/tests/unit/extensions/test_standby.py +++ b/ironic_python_agent/tests/unit/extensions/test_standby.py @@ -523,7 +523,7 @@ class TestStandbyExtension(base.IronicAgentTest): 'checksum': 'fake-checksum'}), mock.call.info('Image downloaded from %(image_location)s in ' '%(totaltime)s seconds. Transferred %(size)s ' - 'bytes. Server originaly reported: %(reported)s.', + 'bytes. Server originally reported: %(reported)s.', {'image_location': mock.ANY, 'totaltime': mock.ANY, 'size': 11, @@ -1401,7 +1401,7 @@ class TestStandbyExtension(base.IronicAgentTest): 'checksum': 'fake-checksum'}), mock.call.info('Image streamed onto device %(device)s in ' '%(totaltime)s seconds for %(size)s bytes. ' - 'Server originaly reported %(reported)s.', + 'Server originally reported %(reported)s.', {'device': '/dev/foo', 'totaltime': mock.ANY, 'size': 11, diff --git a/ironic_python_agent/tests/unit/samples/hardware_samples.py b/ironic_python_agent/tests/unit/samples/hardware_samples.py index 93a63ac56..2869e3f40 100644 --- a/ironic_python_agent/tests/unit/samples/hardware_samples.py +++ b/ironic_python_agent/tests/unit/samples/hardware_samples.py @@ -165,7 +165,7 @@ BLK_INCOMPLETE_DEVICE_TEMPLATE_SMALL = """ # NOTE(dszumski): We include some partitions here to verify that # they are filtered out when not requested. It is assumed that # ROTA has been set to 0 on some software RAID devices for testing -# purposes. In practice is appears to inherit from the underyling +# purposes. In practice is appears to inherit from the underlying # devices, so in this example it would normally be 1. RAID_BLK_DEVICE_TEMPLATE = (""" { diff --git a/ironic_python_agent/tests/unit/test_burnin.py b/ironic_python_agent/tests/unit/test_burnin.py index 25d334e72..f1b2f99cd 100644 --- a/ironic_python_agent/tests/unit/test_burnin.py +++ b/ironic_python_agent/tests/unit/test_burnin.py @@ -464,7 +464,7 @@ class TestBurnin(base.IronicAgentTest): # we are the first node to enter, so no other host # initially until the second one appears after some - # interations + # iterations mock_coordinator.get_members.side_effect = \ [Members(), Members([b'host1']), Members([b'host1']), Members([b'host1']), Members([b'host1', b'host2'])] diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py index 827a2cdfc..7b6550f68 100644 --- a/ironic_python_agent/tests/unit/test_hardware.py +++ b/ironic_python_agent/tests/unit/test_hardware.py @@ -3951,7 +3951,7 @@ class TestGenericHardwareManager(base.IronicAgentTest): [device1, device2, device3], [device1, device2, device3]] - # pre-creation validation fails as insufficent number of devices found + # pre-creation validation fails as insufficient number of devices found error_regex = ("Software RAID configuration is not possible for " "RAID level 6 with only 3 block devices found.") diff --git a/ironic_python_agent/tests/unit/test_inject_files.py b/ironic_python_agent/tests/unit/test_inject_files.py index f99c7feae..30da3963f 100644 --- a/ironic_python_agent/tests/unit/test_inject_files.py +++ b/ironic_python_agent/tests/unit/test_inject_files.py @@ -228,7 +228,7 @@ class TestInjectOne(base.IronicAgentTest): with open(self.path, 'rb') as fp: self.assertEqual(b'content', fp.read()) self.assertEqual(0o602, stat.S_IMODE(os.stat(self.path).st_mode)) - # Exising directories do not change their permissions + # Existing directories do not change their permissions self.assertNotEqual(0o703, stat.S_IMODE(os.stat(self.dirpath).st_mode)) mock_find_and_mount.assert_called_once_with(fl['path'], None, diff --git a/ironic_python_agent/tests/unit/test_partition_utils.py b/ironic_python_agent/tests/unit/test_partition_utils.py index 93b6fab47..055f72159 100644 --- a/ironic_python_agent/tests/unit/test_partition_utils.py +++ b/ironic_python_agent/tests/unit/test_partition_utils.py @@ -1501,7 +1501,7 @@ class TestConfigDriveTestRecovery(base.IronicAgentTest): mock_mkfs.side_effect = processutils.ProcessExecutionError('boom') self.assertRaisesRegex( exception.InstanceDeployFailure, - 'A failure occured while attempting to format.*', + 'A failure occurred while attempting to format.*', partition_utils._try_build_fat32_config_drive, self.fake_dev, self.configdrive_file) diff --git a/ironic_python_agent/utils.py b/ironic_python_agent/utils.py index c5889e9bd..f3dbe35fc 100644 --- a/ironic_python_agent/utils.py +++ b/ironic_python_agent/utils.py @@ -224,7 +224,7 @@ def _find_mount_point(device): def _check_vmedia_device(vmedia_device_file): """Check if a virtual media device appears valid. - Explicitly ignores partitions, actual disks, and other itmes that + Explicitly ignores partitions, actual disks, and other items that seem unlikely to be virtual media based items being provided into the running operating system via a BMC. @@ -622,7 +622,7 @@ def _parse_capabilities_str(cap_str): """Extract capabilities from string. :param cap_str: string meant to meet key1:value1,key2:value2 format - :return: a dictionnary + :return: a dictionary """ LOG.debug("Parsing capability string %s", cap_str) capabilities = {} @@ -689,7 +689,7 @@ def get_node_boot_mode(node): 'instance_info/capabilities' of node. Otherwise it directly look for boot mode hints into - :param node: dictionnary. + :param node: dictionary. :returns: 'bios' or 'uefi' """ instance_info = node.get('instance_info', {}) @@ -697,7 +697,7 @@ def get_node_boot_mode(node): node_caps = parse_capabilities(node.get('properties', {})) if _is_secure_boot(instance_info_caps, node_caps): - LOG.debug('Deploy boot mode is implicitely uefi for because secure ' + LOG.debug('Deploy boot mode is implicitly uefi because secure ' 'boot is activated.') return 'uefi' @@ -770,7 +770,7 @@ def determine_time_method(): :returns: "ntpdate" if ntpdate has been found, "chrony" if chrony was located, and None if neither are located. If both tools - are present, "chrony" will supercede "ntpdate". + are present, "chrony" will supersede "ntpdate". """ try: execute('chronyd', '-h') diff --git a/releasenotes/notes/adds-smartctl-ata-check-to-secure-erase-caebba4f25821575.yaml b/releasenotes/notes/adds-smartctl-ata-check-to-secure-erase-caebba4f25821575.yaml index 331f36eba..a178308a6 100644 --- a/releasenotes/notes/adds-smartctl-ata-check-to-secure-erase-caebba4f25821575.yaml +++ b/releasenotes/notes/adds-smartctl-ata-check-to-secure-erase-caebba4f25821575.yaml @@ -3,7 +3,7 @@ fixes: - | Adds an additional check if the ``smartctl`` utility is present from the ``smartmontools`` package, which performs an ATA disk specific check that - should prevent ATA Secure Erase from being performed if a pass-thru + should prevent ATA Secure Erase from being performed if a pass-through device is detected that requires a non-ATA command signling sequence. Devices such as these can be `smart` disk interfaces such as RAID controllers and USB disk adapters, which can cause failures diff --git a/releasenotes/notes/allows-bootloader-install-failure-to-be-ignored-b99667b13afa9759.yaml b/releasenotes/notes/allows-bootloader-install-failure-to-be-ignored-b99667b13afa9759.yaml index fe1590f46..ea523d8cf 100644 --- a/releasenotes/notes/allows-bootloader-install-failure-to-be-ignored-b99667b13afa9759.yaml +++ b/releasenotes/notes/allows-bootloader-install-failure-to-be-ignored-b99667b13afa9759.yaml @@ -7,9 +7,9 @@ features: useful to work around well-intentioned hardware which is auto-populating all possible device into the UEFI nvram firmware in order to try and help ensure the machine boots. Except, this can also mean any - explict configuration attempt will fail. Operators needing this bypass + explicit configuration attempt will fail. Operators needing this bypass can use the ``ipa-ignore-bootloader-failure`` configuration option on the PXE command line or utilize the ``ignore_bootloader_failure`` option for the Ramdisk configuration. - In a future version of ironic, this setting may be able to be overriden + In a future version of ironic, this setting may be able to be overridden by ironic node level configuration. diff --git a/releasenotes/notes/clarify-heartbeat-connection-errors-2af152bf2d7928e2.yaml b/releasenotes/notes/clarify-heartbeat-connection-errors-2af152bf2d7928e2.yaml index dace1cd50..eec3de5f0 100644 --- a/releasenotes/notes/clarify-heartbeat-connection-errors-2af152bf2d7928e2.yaml +++ b/releasenotes/notes/clarify-heartbeat-connection-errors-2af152bf2d7928e2.yaml @@ -3,7 +3,7 @@ other: - | Adds an explicit capture of connectivity failures in the heartbeat process to provide a more verbose error message in line with what is - occuring as opposed to just indicating that an error occured. This + occurring as opposed to just indicating that an error occurred. This new exception is called ``HeartbeatConnectionError`` and is likely only going to be visible if there is a local connectivity failure such as a router failure, switchport in a blocking state, or connection centered diff --git a/releasenotes/notes/deprecate-coreos-8b01bcf796c0dc54.yaml b/releasenotes/notes/deprecate-coreos-8b01bcf796c0dc54.yaml index 89ae7f4ac..ba047dd2a 100644 --- a/releasenotes/notes/deprecate-coreos-8b01bcf796c0dc54.yaml +++ b/releasenotes/notes/deprecate-coreos-8b01bcf796c0dc54.yaml @@ -12,7 +12,7 @@ deprecations: as of January 2019, CoreOS: 1) Current CoreOS images require 2GB of RAM to operate. - As a result of the RAM requirement, it is problematic for continious + As a result of the RAM requirement, it is problematic for continuous integration testing to occur with the CoreOS based Ironic-Python-Agent image in OpenStack testing infrastructure. diff --git a/releasenotes/notes/fallback-to-findfs-59abde55221e1e84.yaml b/releasenotes/notes/fallback-to-findfs-59abde55221e1e84.yaml index bc70a6af5..b43135d7d 100644 --- a/releasenotes/notes/fallback-to-findfs-59abde55221e1e84.yaml +++ b/releasenotes/notes/fallback-to-findfs-59abde55221e1e84.yaml @@ -5,6 +5,6 @@ fixes: root volume uuid detection method via the ``findfs`` utility, which is also already packaged in most distributions with ``lsblk``. - This fallback was necesary as the ``lsblk`` command in ``TinyCore`` Linux, + This fallback was necessary as the ``lsblk`` command in ``TinyCore`` Linux, upon which TinyIPA is built, does not return data as expected for volume UUID values. diff --git a/releasenotes/notes/multipath-handling-00a5b412d2cf2e4e.yaml b/releasenotes/notes/multipath-handling-00a5b412d2cf2e4e.yaml index 19f299cab..c45e6918c 100644 --- a/releasenotes/notes/multipath-handling-00a5b412d2cf2e4e.yaml +++ b/releasenotes/notes/multipath-handling-00a5b412d2cf2e4e.yaml @@ -7,7 +7,7 @@ fixes: to handle and account for multipaths based upon the MPIO data available. This requires the ``multipath`` and ``multipathd`` utility to be present in the ramdisk. These are supplied by the ``device-mapper-multipath`` or - ``multipath-tools`` packages, and are not requried for the agent's use. + ``multipath-tools`` packages, and are not required for the agent's use. - | Fixes non-ideal behavior when performing cleaning where Active/Active MPIO devices would ultimately be cleaned once per IO path, instead of diff --git a/releasenotes/notes/understand-node-conflict-is-locked-2ea21dd45abfe4f7.yaml b/releasenotes/notes/understand-node-conflict-is-locked-2ea21dd45abfe4f7.yaml index c0e77964e..480357244 100644 --- a/releasenotes/notes/understand-node-conflict-is-locked-2ea21dd45abfe4f7.yaml +++ b/releasenotes/notes/understand-node-conflict-is-locked-2ea21dd45abfe4f7.yaml @@ -3,7 +3,7 @@ fixes: - | Fixes, or at least lessens the case where a running Ironic agent can stack up numerous lookup requests against an Ironic deployment when a node is - locked. In particular, this is beause the lookup also drives generation of + locked. In particular, this is because the lookup also drives generation of the agent token, which requires the conductor to allocate a worker, and generate the token, and return the result to the API client. Ironic's retry logic will now wait up to ``60`` seconds, and if an HTTP