summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ironic/drivers/modules/agent.py3
-rw-r--r--ironic/tests/unit/common/test_pxe_utils.py28
-rw-r--r--ironic/tests/unit/drivers/modules/test_pxe.py34
3 files changed, 30 insertions, 35 deletions
diff --git a/ironic/drivers/modules/agent.py b/ironic/drivers/modules/agent.py
index 0c5e47a2d..a4a3b2b4c 100644
--- a/ironic/drivers/modules/agent.py
+++ b/ironic/drivers/modules/agent.py
@@ -451,7 +451,8 @@ class AgentDeploy(AgentDeployMixin, base.DeployInterface):
task.driver.storage.attach_volumes(task)
if not task.driver.storage.should_write_image(task):
# We have nothing else to do as this is handled in the
- # backend storage system.
+ # backend storage system, and we can return to the caller
+ # as we do not need to boot the agent to deploy.
return
if node.provision_state == states.ACTIVE:
# Call is due to conductor takeover
diff --git a/ironic/tests/unit/common/test_pxe_utils.py b/ironic/tests/unit/common/test_pxe_utils.py
index d43506a71..6375027f7 100644
--- a/ironic/tests/unit/common/test_pxe_utils.py
+++ b/ironic/tests/unit/common/test_pxe_utils.py
@@ -532,16 +532,15 @@ class TestPXEUtils(db_base.DbTestCase):
rmtree_mock.assert_called_once_with(
os.path.join(CONF.pxe.tftp_root, self.node.uuid))
- @mock.patch.object(os.path, 'isfile', autospec=True)
+ @mock.patch.object(os.path, 'isfile', lambda path: False)
@mock.patch('ironic.common.utils.file_has_content', autospec=True)
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
@mock.patch('ironic.common.utils.render_template', autospec=True)
def test_create_ipxe_boot_script(self, render_mock, write_mock,
- cmp_mock, isfile_mock):
- isfile_mock.return_value = False
+ file_has_content_mock):
render_mock.return_value = 'foo'
- self.assertFalse(cmp_mock.called)
pxe_utils.create_ipxe_boot_script()
+ self.assertFalse(file_has_content_mock.called)
write_mock.assert_called_once_with(
os.path.join(CONF.deploy.http_root,
os.path.basename(CONF.pxe.ipxe_boot_script)),
@@ -550,17 +549,19 @@ class TestPXEUtils(db_base.DbTestCase):
CONF.pxe.ipxe_boot_script,
{'ipxe_for_mac_uri': 'pxelinux.cfg/'})
- @mock.patch.object(os.path, 'isfile', autospec=True)
+ @mock.patch.object(os.path, 'isfile', lambda path: True)
@mock.patch('ironic.common.utils.file_has_content', autospec=True)
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
@mock.patch('ironic.common.utils.render_template', autospec=True)
def test_create_ipxe_boot_script_copy_file_different(
- self, render_mock, write_mock, cmp_mock, isfile_mock):
- isfile_mock.return_value = True
- cmp_mock.return_value = False
+ self, render_mock, write_mock, file_has_content_mock):
+ file_has_content_mock.return_value = False
render_mock.return_value = 'foo'
- self.assertFalse(cmp_mock.called)
pxe_utils.create_ipxe_boot_script()
+ file_has_content_mock.assert_called_once_with(
+ os.path.join(CONF.deploy.http_root,
+ os.path.basename(CONF.pxe.ipxe_boot_script)),
+ 'foo')
write_mock.assert_called_once_with(
os.path.join(CONF.deploy.http_root,
os.path.basename(CONF.pxe.ipxe_boot_script)),
@@ -569,15 +570,14 @@ class TestPXEUtils(db_base.DbTestCase):
CONF.pxe.ipxe_boot_script,
{'ipxe_for_mac_uri': 'pxelinux.cfg/'})
- @mock.patch.object(os.path, 'isfile', autospec=True)
+ @mock.patch.object(os.path, 'isfile', lambda path: True)
@mock.patch('ironic.common.utils.file_has_content', autospec=True)
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
@mock.patch('ironic.common.utils.render_template', autospec=True)
def test_create_ipxe_boot_script_already_exists(self, render_mock,
- write_mock, cmp_mock,
- isfile_mock):
- isfile_mock.return_value = True
- cmp_mock.return_value = True
+ write_mock,
+ file_has_content_mock):
+ file_has_content_mock.return_value = True
pxe_utils.create_ipxe_boot_script()
self.assertFalse(write_mock.called)
diff --git a/ironic/tests/unit/drivers/modules/test_pxe.py b/ironic/tests/unit/drivers/modules/test_pxe.py
index 2a53368b5..7c77e6328 100644
--- a/ironic/tests/unit/drivers/modules/test_pxe.py
+++ b/ironic/tests/unit/drivers/modules/test_pxe.py
@@ -31,6 +31,7 @@ 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 as common_utils
from ironic.conductor import task_manager
from ironic.conductor import utils as manager_utils
from ironic.drivers.modules import agent_base_vendor
@@ -880,18 +881,16 @@ class PXEBootTestCase(db_base.DbTestCase):
self.node.save()
self._test_prepare_ramdisk(uefi=True)
- @mock.patch.object(os.path, 'isfile', autospec=True)
- @mock.patch('ironic.common.utils.file_has_content', autospec=True)
+ @mock.patch.object(os.path, 'isfile', lambda path: True)
+ @mock.patch.object(common_utils, 'file_has_content', lambda *args: False)
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
@mock.patch('ironic.common.utils.render_template', autospec=True)
def test_prepare_ramdisk_ipxe_with_copy_file_different(
- self, render_mock, write_mock, cmp_mock, isfile_mock):
+ self, render_mock, write_mock):
self.node.provision_state = states.DEPLOYING
self.node.save()
self.config(group='pxe', ipxe_enabled=True)
self.config(group='deploy', http_url='http://myserver')
- isfile_mock.return_value = True
- cmp_mock.return_value = False
render_mock.return_value = 'foo'
self._test_prepare_ramdisk()
write_mock.assert_called_once_with(
@@ -903,20 +902,19 @@ class PXEBootTestCase(db_base.DbTestCase):
CONF.pxe.ipxe_boot_script,
{'ipxe_for_mac_uri': 'pxelinux.cfg/'})
- @mock.patch.object(os.path, 'isfile', autospec=True)
+ @mock.patch.object(os.path, 'isfile', lambda path: False)
@mock.patch('ironic.common.utils.file_has_content', autospec=True)
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
@mock.patch('ironic.common.utils.render_template', autospec=True)
def test_prepare_ramdisk_ipxe_with_copy_no_file(
- self, render_mock, write_mock, cmp_mock, isfile_mock):
+ self, render_mock, write_mock, file_has_content_mock):
self.node.provision_state = states.DEPLOYING
self.node.save()
self.config(group='pxe', ipxe_enabled=True)
self.config(group='deploy', http_url='http://myserver')
- isfile_mock.return_value = False
render_mock.return_value = 'foo'
self._test_prepare_ramdisk()
- self.assertFalse(cmp_mock.called)
+ self.assertFalse(file_has_content_mock.called)
write_mock.assert_called_once_with(
os.path.join(
CONF.deploy.http_root,
@@ -926,30 +924,27 @@ class PXEBootTestCase(db_base.DbTestCase):
CONF.pxe.ipxe_boot_script,
{'ipxe_for_mac_uri': 'pxelinux.cfg/'})
- @mock.patch.object(os.path, 'isfile', autospec=True)
- @mock.patch('ironic.common.utils.file_has_content', autospec=True)
+ @mock.patch.object(os.path, 'isfile', lambda path: True)
+ @mock.patch.object(common_utils, 'file_has_content', lambda *args: True)
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
@mock.patch('ironic.common.utils.render_template', autospec=True)
def test_prepare_ramdisk_ipxe_without_copy(
- self, render_mock, write_mock, cmp_mock, isfile_mock):
+ self, render_mock, write_mock):
self.node.provision_state = states.DEPLOYING
self.node.save()
self.config(group='pxe', ipxe_enabled=True)
self.config(group='deploy', http_url='http://myserver')
- isfile_mock.return_value = True
- cmp_mock.return_value = True
self._test_prepare_ramdisk()
self.assertFalse(write_mock.called)
+ @mock.patch.object(common_utils, 'render_template', lambda *args: 'foo')
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
- @mock.patch('ironic.common.utils.render_template', autospec=True)
- def test_prepare_ramdisk_ipxe_swift(self, render_mock, write_mock):
+ def test_prepare_ramdisk_ipxe_swift(self, write_mock):
self.node.provision_state = states.DEPLOYING
self.node.save()
self.config(group='pxe', ipxe_enabled=True)
self.config(group='pxe', ipxe_use_swift=True)
self.config(group='deploy', http_url='http://myserver')
- render_mock.return_value = 'foo'
self._test_prepare_ramdisk(ipxe_use_swift=True)
write_mock.assert_called_once_with(
os.path.join(
@@ -957,16 +952,15 @@ class PXEBootTestCase(db_base.DbTestCase):
os.path.basename(CONF.pxe.ipxe_boot_script)),
'foo')
+ @mock.patch.object(common_utils, 'render_template', lambda *args: 'foo')
@mock.patch('ironic.common.utils.write_to_file', autospec=True)
- @mock.patch('ironic.common.utils.render_template', autospec=True)
def test_prepare_ramdisk_ipxe_swift_whole_disk_image(
- self, render_mock, write_mock):
+ self, write_mock):
self.node.provision_state = states.DEPLOYING
self.node.save()
self.config(group='pxe', ipxe_enabled=True)
self.config(group='pxe', ipxe_use_swift=True)
self.config(group='deploy', http_url='http://myserver')
- render_mock.return_value = 'foo'
self._test_prepare_ramdisk(ipxe_use_swift=True, whole_disk_image=True)
write_mock.assert_called_once_with(
os.path.join(