diff --git a/etc/ironic/rootwrap.d/ironic-utils.filters b/etc/ironic/rootwrap.d/ironic-utils.filters index 1c7eb858e8..46e82e5ebd 100644 --- a/etc/ironic/rootwrap.d/ironic-utils.filters +++ b/etc/ironic/rootwrap.d/ironic-utils.filters @@ -6,8 +6,5 @@ iscsiadm: CommandFilter, iscsiadm, root # ironic/common/utils.py -mkswap: CommandFilter, mkswap, root -mkfs: CommandFilter, mkfs, root mount: CommandFilter, mount, root umount: CommandFilter, umount, root -dd: CommandFilter, dd, root diff --git a/ironic/common/images.py b/ironic/common/images.py index ed2e49daa7..682a1a7a29 100644 --- a/ironic/common/images.py +++ b/ironic/common/images.py @@ -23,6 +23,7 @@ import os import shutil from ironic_lib import disk_utils +from ironic_lib import utils as ironic_utils import jinja2 from oslo_concurrency import processutils from oslo_config import cfg @@ -119,7 +120,8 @@ def create_vfat_image(output_file, files_info=None, parameters=None, creating filesystem, copying files, etc. """ try: - utils.dd('/dev/zero', output_file, 'count=1', "bs=%dKiB" % fs_size_kib) + ironic_utils.dd('/dev/zero', output_file, 'count=1', + "bs=%dKiB" % fs_size_kib) except processutils.ProcessExecutionError as e: raise exception.ImageCreationFailed(image_type='vfat', error=e) @@ -129,7 +131,7 @@ def create_vfat_image(output_file, files_info=None, parameters=None, # The label helps ramdisks to find the partition containing # the parameters (by using /dev/disk/by-label/ir-vfd-dev). # NOTE: FAT filesystem label can be up to 11 characters long. - utils.mkfs('vfat', output_file, label="ir-vfd-dev") + ironic_utils.mkfs('vfat', output_file, label="ir-vfd-dev") utils.mount(output_file, tmpdir, '-o', 'umask=0') except processutils.ProcessExecutionError as e: raise exception.ImageCreationFailed(image_type='vfat', error=e) diff --git a/ironic/common/pxe_utils.py b/ironic/common/pxe_utils.py index 5fece7c8cf..942bd92da5 100644 --- a/ironic/common/pxe_utils.py +++ b/ironic/common/pxe_utils.py @@ -16,6 +16,7 @@ import os +from ironic_lib import utils as ironic_utils import jinja2 from oslo_config import cfg from oslo_log import log as logging @@ -84,7 +85,7 @@ def _link_mac_pxe_configs(task): """ def create_link(mac_path): - utils.unlink_without_raise(mac_path) + ironic_utils.unlink_without_raise(mac_path) relative_source_path = os.path.relpath( pxe_config_file_path, os.path.dirname(mac_path)) utils.create_link_without_raise(relative_source_path, mac_path) @@ -120,7 +121,7 @@ def _link_ip_address_pxe_configs(task, hex_form): for port_ip_address in ip_addrs: ip_address_path = _get_pxe_ip_address_path(port_ip_address, hex_form) - utils.unlink_without_raise(ip_address_path) + ironic_utils.unlink_without_raise(ip_address_path) relative_source_path = os.path.relpath( pxe_config_file_path, os.path.dirname(ip_address_path)) utils.create_link_without_raise(relative_source_path, @@ -276,18 +277,18 @@ def clean_up_pxe_config(task): except exception.InvalidIPv4Address: continue # Cleaning up config files created for grub2. - utils.unlink_without_raise(ip_address_path) + ironic_utils.unlink_without_raise(ip_address_path) # Cleaning up config files created for elilo. - utils.unlink_without_raise(hex_ip_path) + ironic_utils.unlink_without_raise(hex_ip_path) else: for mac in driver_utils.get_node_mac_addresses(task): - utils.unlink_without_raise(_get_pxe_mac_path(mac)) + ironic_utils.unlink_without_raise(_get_pxe_mac_path(mac)) # TODO(lucasagomes): Backward compatibility with :hexraw, # to be removed in Mitaka. # see: https://bugs.launchpad.net/ironic/+bug/1441710 if CONF.pxe.ipxe_enabled: - utils.unlink_without_raise(_get_pxe_mac_path(mac, - delimiter='')) + ironic_utils.unlink_without_raise(_get_pxe_mac_path(mac, + delimiter='')) utils.rmtree_without_raise(os.path.join(get_root_dir(), task.node.uuid)) diff --git a/ironic/common/utils.py b/ironic/common/utils.py index 4bb54f2c17..7566d65962 100644 --- a/ironic/common/utils.py +++ b/ironic/common/utils.py @@ -32,7 +32,6 @@ import netaddr from oslo_concurrency import processutils from oslo_config import cfg from oslo_log import log as logging -from oslo_utils import excutils from oslo_utils import timeutils import paramiko import pytz @@ -463,60 +462,6 @@ def tempdir(**kwargs): LOG.error(_LE('Could not remove tmpdir: %s'), e) -def mkfs(fs, path, label=None): - """Format a file or block device - - :param fs: Filesystem type (examples include 'swap', 'ext3', 'ext4' - 'btrfs', etc.) - :param path: Path to file or block device to format - :param label: Volume label to use - """ - # NOTE(jlvillal): This function has been moved to ironic-lib. And is - # planned to be deleted here. If need to modify this function, please also - # do the same modification in ironic-lib - if fs == 'swap': - args = ['mkswap'] - else: - args = ['mkfs', '-t', fs] - # add -F to force no interactive execute on non-block device. - if fs in ('ext3', 'ext4'): - args.extend(['-F']) - if label: - if fs in ('msdos', 'vfat'): - label_opt = '-n' - else: - label_opt = '-L' - args.extend([label_opt, label]) - args.append(path) - try: - execute(*args, run_as_root=True, use_standard_locale=True) - except processutils.ProcessExecutionError as e: - with excutils.save_and_reraise_exception() as ctx: - if os.strerror(errno.ENOENT) in e.stderr: - ctx.reraise = False - LOG.exception(_LE('Failed to make file system. ' - 'File system %s is not supported.'), fs) - raise exception.FileSystemNotSupported(fs=fs) - else: - LOG.exception(_LE('Failed to create a file system ' - 'in %(path)s. Error: %(error)s'), - {'path': path, 'error': e}) - - -def unlink_without_raise(path): - # NOTE(jlvillal): This function has been moved to ironic-lib. And is - # planned to be deleted here. If need to modify this function, please also - # do the same modification in ironic-lib - try: - os.unlink(path) - except OSError as e: - if e.errno == errno.ENOENT: - return - else: - LOG.warning(_LW("Failed to unlink %(path)s, error: %(e)s"), - {'path': path, 'e': e}) - - def rmtree_without_raise(path): try: if os.path.isdir(path): @@ -588,32 +533,6 @@ def umount(loc, *args): execute(*args, run_as_root=True, check_exit_code=[0]) -def dd(src, dst, *args): - """Execute dd from src to dst. - - :param src: the input file for dd command. - :param dst: the output file for dd command. - :param args: a tuple containing the arguments to be - passed to dd command. - :raises: processutils.ProcessExecutionError if it failed - to run the process. - """ - # NOTE(jlvillal): This function has been moved to ironic-lib. And is - # planned to be deleted here. If need to modify this function, please also - # do the same modification in ironic-lib - LOG.debug("Starting dd process.") - execute('dd', 'if=%s' % src, 'of=%s' % dst, *args, - use_standard_locale=True, run_as_root=True, check_exit_code=[0]) - - -def is_http_url(url): - # NOTE(jlvillal): This function has been moved to ironic-lib. And is - # planned to be deleted here. If need to modify this function, please also - # do the same modification in ironic-lib - url = url.lower() - return url.startswith('http://') or url.startswith('https://') - - def check_dir(directory_to_check=None, required_space=1): """Check a directory is usable. diff --git a/ironic/drivers/modules/console_utils.py b/ironic/drivers/modules/console_utils.py index 2a952cdb56..ca1a4e4b3d 100644 --- a/ironic/drivers/modules/console_utils.py +++ b/ironic/drivers/modules/console_utils.py @@ -26,6 +26,7 @@ import signal import subprocess import time +from ironic_lib import utils as ironic_utils from oslo_concurrency import processutils from oslo_config import cfg from oslo_log import log as logging @@ -136,7 +137,7 @@ def _stop_console(node_uuid): "but pid file exists while trying to stop " "shellinabox console."), node_uuid) finally: - utils.unlink_without_raise(_get_console_pid_file(node_uuid)) + ironic_utils.unlink_without_raise(_get_console_pid_file(node_uuid)) def make_persistent_password_file(path, password): diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py index 90e29b7287..524988f81a 100644 --- a/ironic/drivers/modules/ilo/boot.py +++ b/ironic/drivers/modules/ilo/boot.py @@ -18,6 +18,7 @@ Boot Interface for iLO drivers and its supporting methods. import os import tempfile +from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_log import log as logging from oslo_utils import excutils @@ -32,7 +33,6 @@ from ironic.common.i18n import _LW from ironic.common import image_service from ironic.common import images from ironic.common import swift -from ironic.common import utils from ironic.conductor import utils as manager_utils from ironic.drivers import base from ironic.drivers.modules import deploy_utils @@ -223,7 +223,7 @@ def _clean_up_boot_iso_for_instance(node): ilo_boot_iso_name = os.path.basename(result.path) boot_iso_path = os.path.join( CONF.deploy.http_root, ilo_boot_iso_name) - utils.unlink_without_raise(boot_iso_path) + ironic_utils.unlink_without_raise(boot_iso_path) def _parse_deploy_info(node): diff --git a/ironic/drivers/modules/ilo/common.py b/ironic/drivers/modules/ilo/common.py index a74b1fcdee..950f2d6166 100644 --- a/ironic/drivers/modules/ilo/common.py +++ b/ironic/drivers/modules/ilo/common.py @@ -20,6 +20,7 @@ import os import shutil import tempfile +from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils @@ -325,7 +326,7 @@ def destroy_floppy_image_from_web_server(node): object_name = _get_floppy_image_name(node) image_path = os.path.join(CONF.deploy.http_root, object_name) - utils.unlink_without_raise(image_path) + ironic_utils.unlink_without_raise(image_path) def attach_vmedia(node, device, url): diff --git a/ironic/drivers/modules/ipminative.py b/ironic/drivers/modules/ipminative.py index 3df9ff94d1..9b9409a2f4 100644 --- a/ironic/drivers/modules/ipminative.py +++ b/ironic/drivers/modules/ipminative.py @@ -21,6 +21,7 @@ Ironic Native IPMI power manager. import os +from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_log import log as logging from oslo_utils import excutils @@ -605,7 +606,7 @@ class NativeIPMIShellinaboxConsole(base.ConsoleInterface): console_cmd) except exception.ConsoleError: with excutils.save_and_reraise_exception(): - utils.unlink_without_raise(path) + ironic_utils.unlink_without_raise(path) def stop_console(self, task): """Stop the remote console session for the node. @@ -617,7 +618,7 @@ class NativeIPMIShellinaboxConsole(base.ConsoleInterface): console_utils.stop_shellinabox_console(task.node.uuid) finally: password_file = _console_pwfile_path(task.node.uuid) - utils.unlink_without_raise(password_file) + ironic_utils.unlink_without_raise(password_file) def get_console(self, task): """Get the type and connection information about the console. diff --git a/ironic/drivers/modules/ipmitool.py b/ironic/drivers/modules/ipmitool.py index 5beb398063..027a6f3ad4 100644 --- a/ironic/drivers/modules/ipmitool.py +++ b/ironic/drivers/modules/ipmitool.py @@ -36,6 +36,7 @@ import subprocess import tempfile import time +from ironic_lib import utils as ironic_utils from oslo_concurrency import processutils from oslo_config import cfg from oslo_log import log as logging @@ -1126,7 +1127,7 @@ class IPMIShellinaboxConsole(base.ConsoleInterface): ipmi_cmd) except (exception.ConsoleError, exception.ConsoleSubprocessFailed): with excutils.save_and_reraise_exception(): - utils.unlink_without_raise(path) + ironic_utils.unlink_without_raise(path) def stop_console(self, task): """Stop the remote console session for the node. @@ -1137,7 +1138,7 @@ class IPMIShellinaboxConsole(base.ConsoleInterface): try: console_utils.stop_shellinabox_console(task.node.uuid) finally: - utils.unlink_without_raise( + ironic_utils.unlink_without_raise( _console_pwfile_path(task.node.uuid)) def get_console(self, task): diff --git a/ironic/drivers/modules/irmc/boot.py b/ironic/drivers/modules/irmc/boot.py index 92ae961a83..975ad3491c 100644 --- a/ironic/drivers/modules/irmc/boot.py +++ b/ironic/drivers/modules/irmc/boot.py @@ -20,6 +20,7 @@ import os import shutil import tempfile +from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils @@ -32,7 +33,6 @@ from ironic.common.i18n import _LE from ironic.common.i18n import _LI from ironic.common import images from ironic.common import states -from ironic.common import utils from ironic.conductor import utils as manager_utils from ironic.drivers import base from ironic.drivers.modules import deploy_utils @@ -421,7 +421,7 @@ def _remove_share_file(share_filename): """ share_fullpathname = os.path.join( CONF.irmc.remote_image_share_name, share_filename) - utils.unlink_without_raise(share_fullpathname) + ironic_utils.unlink_without_raise(share_fullpathname) def _attach_virtual_cd(node, bootable_iso_filename): diff --git a/ironic/drivers/modules/iscsi_deploy.py b/ironic/drivers/modules/iscsi_deploy.py index 443fe00919..c187d5f1f9 100644 --- a/ironic/drivers/modules/iscsi_deploy.py +++ b/ironic/drivers/modules/iscsi_deploy.py @@ -16,6 +16,7 @@ import os from ironic_lib import disk_utils +from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_log import log as logging from oslo_utils import fileutils @@ -281,7 +282,7 @@ def destroy_images(node_uuid): :param node_uuid: the uuid of the ironic node. """ - utils.unlink_without_raise(_get_image_file_path(node_uuid)) + ironic_utils.unlink_without_raise(_get_image_file_path(node_uuid)) utils.rmtree_without_raise(_get_image_dir_path(node_uuid)) InstanceImageCache().clean_up() diff --git a/ironic/drivers/modules/pxe.py b/ironic/drivers/modules/pxe.py index 3424df2f37..af7b5ccba7 100644 --- a/ironic/drivers/modules/pxe.py +++ b/ironic/drivers/modules/pxe.py @@ -18,6 +18,7 @@ PXE Boot Interface import os import shutil +from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_log import log as logging from oslo_utils import fileutils @@ -33,7 +34,6 @@ from ironic.common import image_service as service from ironic.common import paths from ironic.common import pxe_utils from ironic.common import states -from ironic.common import utils from ironic.drivers import base from ironic.drivers.modules import agent from ironic.drivers.modules import deploy_utils @@ -360,7 +360,7 @@ def _clean_up_pxe_env(task, images_info): """ for label in images_info: path = images_info[label][1] - utils.unlink_without_raise(path) + ironic_utils.unlink_without_raise(path) pxe_utils.clean_up_pxe_config(task) TFTPImageCache().clean_up() diff --git a/ironic/tests/unit/common/test_images.py b/ironic/tests/unit/common/test_images.py index 72ee573584..bdeec8f45c 100644 --- a/ironic/tests/unit/common/test_images.py +++ b/ironic/tests/unit/common/test_images.py @@ -19,6 +19,7 @@ import os import shutil from ironic_lib import disk_utils +from ironic_lib import utils as ironic_utils import mock from oslo_concurrency import processutils from oslo_config import cfg @@ -284,10 +285,10 @@ class FsImageTestCase(base.TestCase): @mock.patch.object(images, '_create_root_fs', autospec=True) @mock.patch.object(utils, 'tempdir', autospec=True) @mock.patch.object(utils, 'write_to_file', autospec=True) - @mock.patch.object(utils, 'dd', autospec=True) + @mock.patch.object(ironic_utils, 'dd', autospec=True) @mock.patch.object(utils, 'umount', autospec=True) @mock.patch.object(utils, 'mount', autospec=True) - @mock.patch.object(utils, 'mkfs', autospec=True) + @mock.patch.object(ironic_utils, 'mkfs', autospec=True) def test_create_vfat_image( self, mkfs_mock, mount_mock, umount_mock, dd_mock, write_mock, tempdir_mock, create_root_fs_mock): @@ -319,10 +320,10 @@ class FsImageTestCase(base.TestCase): @mock.patch.object(images, '_create_root_fs', autospec=True) @mock.patch.object(utils, 'tempdir', autospec=True) - @mock.patch.object(utils, 'dd', autospec=True) + @mock.patch.object(ironic_utils, 'dd', autospec=True) @mock.patch.object(utils, 'umount', autospec=True) @mock.patch.object(utils, 'mount', autospec=True) - @mock.patch.object(utils, 'mkfs', autospec=True) + @mock.patch.object(ironic_utils, 'mkfs', autospec=True) def test_create_vfat_image_always_umount( self, mkfs_mock, mount_mock, umount_mock, dd_mock, tempdir_mock, create_root_fs_mock): @@ -338,7 +339,7 @@ class FsImageTestCase(base.TestCase): umount_mock.assert_called_once_with('tempdir') - @mock.patch.object(utils, 'dd', autospec=True) + @mock.patch.object(ironic_utils, 'dd', autospec=True) def test_create_vfat_image_dd_fails(self, dd_mock): dd_mock.side_effect = processutils.ProcessExecutionError @@ -346,8 +347,8 @@ class FsImageTestCase(base.TestCase): images.create_vfat_image, 'tgt_file') @mock.patch.object(utils, 'tempdir', autospec=True) - @mock.patch.object(utils, 'dd', autospec=True) - @mock.patch.object(utils, 'mkfs', autospec=True) + @mock.patch.object(ironic_utils, 'dd', autospec=True) + @mock.patch.object(ironic_utils, 'mkfs', autospec=True) def test_create_vfat_image_mkfs_fails(self, mkfs_mock, dd_mock, tempdir_mock): @@ -361,10 +362,10 @@ class FsImageTestCase(base.TestCase): @mock.patch.object(images, '_create_root_fs', autospec=True) @mock.patch.object(utils, 'tempdir', autospec=True) - @mock.patch.object(utils, 'dd', autospec=True) + @mock.patch.object(ironic_utils, 'dd', autospec=True) @mock.patch.object(utils, 'umount', autospec=True) @mock.patch.object(utils, 'mount', autospec=True) - @mock.patch.object(utils, 'mkfs', autospec=True) + @mock.patch.object(ironic_utils, 'mkfs', autospec=True) def test_create_vfat_image_umount_fails( self, mkfs_mock, mount_mock, umount_mock, dd_mock, tempdir_mock, create_root_fs_mock): diff --git a/ironic/tests/unit/common/test_pxe_utils.py b/ironic/tests/unit/common/test_pxe_utils.py index dbc0914328..b8ecde7838 100644 --- a/ironic/tests/unit/common/test_pxe_utils.py +++ b/ironic/tests/unit/common/test_pxe_utils.py @@ -184,7 +184,7 @@ class TestPXEUtils(db_base.DbTestCase): self.assertEqual(six.text_type(expected_template), rendered_template) @mock.patch('ironic.common.utils.create_link_without_raise', autospec=True) - @mock.patch('ironic.common.utils.unlink_without_raise', autospec=True) + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) @mock.patch('ironic.drivers.utils.get_node_mac_addresses', autospec=True) def test__write_mac_pxe_configs(self, get_macs_mock, unlink_mock, create_link_mock): @@ -210,7 +210,7 @@ class TestPXEUtils(db_base.DbTestCase): create_link_mock.assert_has_calls(create_link_calls) @mock.patch('ironic.common.utils.create_link_without_raise', autospec=True) - @mock.patch('ironic.common.utils.unlink_without_raise', autospec=True) + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) @mock.patch('ironic.drivers.utils.get_node_mac_addresses', autospec=True) def test__write_mac_ipxe_configs(self, get_macs_mock, unlink_mock, create_link_mock): @@ -243,7 +243,7 @@ class TestPXEUtils(db_base.DbTestCase): create_link_mock.assert_has_calls(create_link_calls) @mock.patch('ironic.common.utils.create_link_without_raise', autospec=True) - @mock.patch('ironic.common.utils.unlink_without_raise', autospec=True) + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) @mock.patch('ironic.common.dhcp_factory.DHCPFactory.provider', autospec=True) def test__link_ip_address_pxe_configs(self, provider_mock, unlink_mock, @@ -372,7 +372,7 @@ class TestPXEUtils(db_base.DbTestCase): self.ipxe_options_uefi) @mock.patch('ironic.common.utils.rmtree_without_raise', autospec=True) - @mock.patch('ironic.common.utils.unlink_without_raise', autospec=True) + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) def test_clean_up_pxe_config(self, unlink_mock, rmtree_mock): address = "aa:aa:aa:aa:aa:aa" object_utils.create_test_port(self.context, node_id=self.node.id, @@ -538,7 +538,7 @@ class TestPXEUtils(db_base.DbTestCase): self._dhcp_options_for_instance_ipxe(task, boot_file) @mock.patch('ironic.common.utils.rmtree_without_raise', autospec=True) - @mock.patch('ironic.common.utils.unlink_without_raise', autospec=True) + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) @mock.patch('ironic.common.dhcp_factory.DHCPFactory.provider') def test_clean_up_pxe_config_uefi(self, provider_mock, unlink_mock, rmtree_mock): @@ -563,7 +563,7 @@ class TestPXEUtils(db_base.DbTestCase): os.path.join(CONF.pxe.tftp_root, self.node.uuid)) @mock.patch('ironic.common.utils.rmtree_without_raise') - @mock.patch('ironic.common.utils.unlink_without_raise') + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) @mock.patch('ironic.common.dhcp_factory.DHCPFactory.provider') def test_clean_up_pxe_config_uefi_instance_info(self, provider_mock, unlink_mock, @@ -588,7 +588,7 @@ class TestPXEUtils(db_base.DbTestCase): os.path.join(CONF.pxe.tftp_root, self.node.uuid)) @mock.patch('ironic.common.utils.rmtree_without_raise', autospec=True) - @mock.patch('ironic.common.utils.unlink_without_raise', autospec=True) + @mock.patch('ironic_lib.utils.unlink_without_raise', autospec=True) def test_clean_up_ipxe_config_uefi(self, unlink_mock, rmtree_mock): self.config(ipxe_enabled=True, group='pxe') address = "aa:aa:aa:aa:aa:aa" diff --git a/ironic/tests/unit/common/test_utils.py b/ironic/tests/unit/common/test_utils.py index 8f8d6e9058..e21bac6e0e 100644 --- a/ironic/tests/unit/common/test_utils.py +++ b/ironic/tests/unit/common/test_utils.py @@ -43,18 +43,6 @@ class BareMetalUtilsTestCase(base.TestCase): s = utils.random_alnum(100) self.assertEqual(100, len(s)) - def test_unlink(self): - with mock.patch.object(os, "unlink", autospec=True) as unlink_mock: - unlink_mock.return_value = None - utils.unlink_without_raise("/fake/path") - unlink_mock.assert_called_once_with("/fake/path") - - def test_unlink_ENOENT(self): - with mock.patch.object(os, "unlink", autospec=True) as unlink_mock: - unlink_mock.side_effect = OSError(errno.ENOENT) - utils.unlink_without_raise("/fake/path") - unlink_mock.assert_called_once_with("/fake/path") - def test_create_link(self): with mock.patch.object(os, "symlink", autospec=True) as symlink_mock: symlink_mock.return_value = None @@ -472,57 +460,6 @@ class GenericUtilsTestCase(base.TestCase): self.assertFalse(utils.is_valid_no_proxy(proxy9)) -class MkfsTestCase(base.TestCase): - - @mock.patch.object(utils, 'execute', autospec=True) - def test_mkfs(self, execute_mock): - utils.mkfs('ext4', '/my/block/dev') - utils.mkfs('msdos', '/my/msdos/block/dev') - utils.mkfs('swap', '/my/swap/block/dev') - - expected = [mock.call('mkfs', '-t', 'ext4', '-F', '/my/block/dev', - run_as_root=True, - use_standard_locale=True), - mock.call('mkfs', '-t', 'msdos', '/my/msdos/block/dev', - run_as_root=True, - use_standard_locale=True), - mock.call('mkswap', '/my/swap/block/dev', - run_as_root=True, - use_standard_locale=True)] - self.assertEqual(expected, execute_mock.call_args_list) - - @mock.patch.object(utils, 'execute', autospec=True) - def test_mkfs_with_label(self, execute_mock): - utils.mkfs('ext4', '/my/block/dev', 'ext4-vol') - utils.mkfs('msdos', '/my/msdos/block/dev', 'msdos-vol') - utils.mkfs('swap', '/my/swap/block/dev', 'swap-vol') - - expected = [mock.call('mkfs', '-t', 'ext4', '-F', '-L', 'ext4-vol', - '/my/block/dev', run_as_root=True, - use_standard_locale=True), - mock.call('mkfs', '-t', 'msdos', '-n', 'msdos-vol', - '/my/msdos/block/dev', run_as_root=True, - use_standard_locale=True), - mock.call('mkswap', '-L', 'swap-vol', - '/my/swap/block/dev', run_as_root=True, - use_standard_locale=True)] - self.assertEqual(expected, execute_mock.call_args_list) - - @mock.patch.object(utils, 'execute', autospec=True) - def test_mkfs_with_unsupported_fs(self, execute_mock): - execute_mock.side_effect = iter([processutils.ProcessExecutionError( - stderr=os.strerror(errno.ENOENT))]) - self.assertRaises(exception.FileSystemNotSupported, - utils.mkfs, 'foo', '/my/block/dev') - - @mock.patch.object(utils, 'execute', autospec=True) - def test_mkfs_with_unexpected_error(self, execute_mock): - execute_mock.side_effect = iter([processutils.ProcessExecutionError( - stderr='fake')]) - self.assertRaises(processutils.ProcessExecutionError, utils.mkfs, - 'ext4', '/my/block/dev', 'ext4-vol') - - class TempFilesTestCase(base.TestCase): def test_tempdir(self): @@ -652,17 +589,6 @@ class TempFilesTestCase(base.TestCase): mock_stat.assert_called_once_with("/fake/path") -class IsHttpUrlTestCase(base.TestCase): - - def test_is_http_url(self): - self.assertTrue(utils.is_http_url('http://127.0.0.1')) - self.assertTrue(utils.is_http_url('https://127.0.0.1')) - self.assertTrue(utils.is_http_url('HTTP://127.1.2.3')) - self.assertTrue(utils.is_http_url('HTTPS://127.3.2.1')) - self.assertFalse(utils.is_http_url('Zm9vYmFy')) - self.assertFalse(utils.is_http_url('11111111')) - - class GetUpdatedCapabilitiesTestCase(base.TestCase): def test_get_updated_capabilities(self): diff --git a/ironic/tests/unit/drivers/modules/ilo/test_boot.py b/ironic/tests/unit/drivers/modules/ilo/test_boot.py index 9984e82687..f1e3f79648 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_boot.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_boot.py @@ -17,6 +17,7 @@ import tempfile +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg import six @@ -27,7 +28,6 @@ from ironic.common.glance_service import service_utils from ironic.common import image_service from ironic.common import images from ironic.common import swift -from ironic.common import utils from ironic.conductor import task_manager from ironic.conductor import utils as manager_utils from ironic.drivers.modules import deploy_utils @@ -395,7 +395,7 @@ class IloBootPrivateMethodsTestCase(db_base.DbTestCase): 'boot-object') self.assertTrue(log_mock.called) - @mock.patch.object(utils, 'unlink_without_raise', spec_set=True, + @mock.patch.object(ironic_utils, 'unlink_without_raise', spec_set=True, autospec=True) def test__clean_up_boot_iso_for_instance_on_webserver(self, unlink_mock): diff --git a/ironic/tests/unit/drivers/modules/ilo/test_common.py b/ironic/tests/unit/drivers/modules/ilo/test_common.py index c4692d57e6..d49c4d0686 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_common.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_common.py @@ -19,6 +19,7 @@ import os import shutil import tempfile +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg from oslo_utils import importutils @@ -28,7 +29,6 @@ from ironic.common import boot_devices from ironic.common import exception from ironic.common import images from ironic.common import swift -from ironic.common import utils from ironic.conductor import task_manager from ironic.conductor import utils as manager_utils from ironic.drivers.modules import deploy_utils @@ -718,7 +718,7 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): copy_mock.assert_called_once_with(source, image_path) self.assertFalse(chmod_mock.called) - @mock.patch.object(utils, 'unlink_without_raise', spec_set=True, + @mock.patch.object(ironic_utils, 'unlink_without_raise', spec_set=True, autospec=True) @mock.patch.object(ilo_common, '_get_floppy_image_name', spec_set=True, autospec=True) diff --git a/ironic/tests/unit/drivers/modules/irmc/test_boot.py b/ironic/tests/unit/drivers/modules/irmc/test_boot.py index 8e3d377359..6bb9b9725f 100644 --- a/ironic/tests/unit/drivers/modules/irmc/test_boot.py +++ b/ironic/tests/unit/drivers/modules/irmc/test_boot.py @@ -20,6 +20,7 @@ import os import shutil import tempfile +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg import six @@ -30,7 +31,6 @@ from ironic.common.glance_service import service_utils from ironic.common.i18n import _ from ironic.common import images from ironic.common import states -from ironic.common import utils from ironic.conductor import task_manager from ironic.conductor import utils as manager_utils from ironic.drivers.modules import deploy_utils @@ -620,7 +620,7 @@ class IRMCDeployPrivateMethodsTestCase(db_base.DbTestCase): [mock.call(_get_floppy_image_name_mock(task.node)), mock.call(_get_deploy_iso_name_mock(task.node))]) - @mock.patch.object(utils, 'unlink_without_raise', spec_set=True, + @mock.patch.object(ironic_utils, 'unlink_without_raise', spec_set=True, autospec=True) def test__remove_share_file(self, unlink_without_raise_mock): CONF.irmc.remote_image_share_name = '/' diff --git a/ironic/tests/unit/drivers/modules/test_console_utils.py b/ironic/tests/unit/drivers/modules/test_console_utils.py index 71fa57da50..bd980464ce 100644 --- a/ironic/tests/unit/drivers/modules/test_console_utils.py +++ b/ironic/tests/unit/drivers/modules/test_console_utils.py @@ -26,12 +26,12 @@ import string import subprocess import tempfile +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg from oslo_utils import netutils from ironic.common import exception -from ironic.common import utils from ironic.drivers.modules import console_utils from ironic.drivers.modules import ipmitool as ipmi from ironic.tests.unit.db import base as db_base @@ -106,7 +106,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): def test__get_console_pid(self, mock_exec): tmp_file_handle = tempfile.NamedTemporaryFile() tmp_file = tmp_file_handle.name - self.addCleanup(utils.unlink_without_raise, tmp_file) + self.addCleanup(ironic_utils.unlink_without_raise, tmp_file) with open(tmp_file, "w") as f: f.write("12345\n") @@ -121,7 +121,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): def test__get_console_pid_not_a_num(self, mock_exec): tmp_file_handle = tempfile.NamedTemporaryFile() tmp_file = tmp_file_handle.name - self.addCleanup(utils.unlink_without_raise, tmp_file) + self.addCleanup(ironic_utils.unlink_without_raise, tmp_file) with open(tmp_file, "w") as f: f.write("Hello World\n") @@ -137,7 +137,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): console_utils._get_console_pid, self.info['uuid']) - @mock.patch.object(utils, 'unlink_without_raise', autospec=True) + @mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) @mock.patch.object(os, 'kill', autospec=True) @mock.patch.object(console_utils, '_get_console_pid', autospec=True) def test__stop_console(self, mock_pid, mock_kill, mock_unlink): @@ -151,7 +151,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): signal.SIGTERM) mock_unlink.assert_called_once_with(pid_file) - @mock.patch.object(utils, 'unlink_without_raise', autospec=True) + @mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) @mock.patch.object(os, 'kill', autospec=True) @mock.patch.object(console_utils, '_get_console_pid', autospec=True) def test__stop_console_nopid(self, mock_pid, mock_kill, mock_unlink): @@ -167,7 +167,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): self.assertFalse(mock_kill.called) mock_unlink.assert_called_once_with(pid_file) - @mock.patch.object(utils, 'unlink_without_raise', autospec=True) + @mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) @mock.patch.object(os, 'kill', autospec=True) @mock.patch.object(console_utils, '_get_console_pid', autospec=True) def test__stop_console_shellinabox_not_running(self, mock_pid, @@ -183,7 +183,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): signal.SIGTERM) mock_unlink.assert_called_once_with(pid_file) - @mock.patch.object(utils, 'unlink_without_raise', autospec=True) + @mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) @mock.patch.object(os, 'kill', autospec=True) @mock.patch.object(console_utils, '_get_console_pid', autospec=True) def test__stop_console_exception(self, mock_pid, mock_kill, mock_unlink): diff --git a/ironic/tests/unit/drivers/modules/test_deploy_utils.py b/ironic/tests/unit/drivers/modules/test_deploy_utils.py index 4f8c3ca347..5c4fc56ada 100644 --- a/ironic/tests/unit/drivers/modules/test_deploy_utils.py +++ b/ironic/tests/unit/drivers/modules/test_deploy_utils.py @@ -20,7 +20,7 @@ import time import types from ironic_lib import disk_utils -from ironic_lib import utils as lib_utils +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg from oslo_utils import uuidutils @@ -784,7 +784,7 @@ class PhysicalWorkTestCase(tests_base.TestCase): self.assertFalse(disk_utils_mock.get_dev_block_size.called) self.assertEqual(root_uuid, uuid_dict_returned['root uuid']) - @mock.patch.object(lib_utils, 'unlink_without_raise', autospec=True) + @mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) def test_deploy_partition_image_with_configdrive(self, mock_unlink): """Check loosely all functions are called with right args.""" address = '127.0.0.1' diff --git a/ironic/tests/unit/drivers/modules/test_iscsi_deploy.py b/ironic/tests/unit/drivers/modules/test_iscsi_deploy.py index 01f396b650..1806fe70b3 100644 --- a/ironic/tests/unit/drivers/modules/test_iscsi_deploy.py +++ b/ironic/tests/unit/drivers/modules/test_iscsi_deploy.py @@ -19,6 +19,7 @@ import os import tempfile from ironic_lib import disk_utils +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg from oslo_utils import fileutils @@ -386,7 +387,7 @@ class IscsiDeployMethodsTestCase(db_base.DbTestCase): 'disk'), image_path) - @mock.patch.object(utils, 'unlink_without_raise', autospec=True) + @mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) @mock.patch.object(utils, 'rmtree_without_raise', autospec=True) @mock.patch.object(iscsi_deploy, 'InstanceImageCache', autospec=True) def test_destroy_images(self, mock_cache, mock_rmtree, mock_unlink): diff --git a/ironic/tests/unit/drivers/modules/test_pxe.py b/ironic/tests/unit/drivers/modules/test_pxe.py index 0b5936fbda..880ee2253f 100644 --- a/ironic/tests/unit/drivers/modules/test_pxe.py +++ b/ironic/tests/unit/drivers/modules/test_pxe.py @@ -19,6 +19,7 @@ import os import shutil import tempfile +from ironic_lib import utils as ironic_utils import mock from oslo_config import cfg from oslo_serialization import jsonutils as json @@ -30,7 +31,6 @@ from ironic.common import exception from ironic.common.glance_service import base_image_service from ironic.common import pxe_utils from ironic.common import states -from ironic.common import utils from ironic.conductor import task_manager from ironic.drivers.modules import deploy_utils from ironic.drivers.modules import pxe @@ -486,7 +486,7 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase): self.assertFalse(mock_log.called) -@mock.patch.object(utils, 'unlink_without_raise', autospec=True) +@mock.patch.object(ironic_utils, 'unlink_without_raise', autospec=True) @mock.patch.object(pxe_utils, 'clean_up_pxe_config', autospec=True) @mock.patch.object(pxe, 'TFTPImageCache', autospec=True) class CleanUpPxeEnvTestCase(db_base.DbTestCase):