iLO firmware update fails with 'update_firmware_sum'

Firmware update using 'update_firmware_sum' is an inband method
wherein it tries to insert HPSUM based firmware ISO into virtual
media. It errors out as Ironic has stopped passing the iLO
credentials to the deploy ramdisk for security reasons. The fix
has been made to insert the HPSUM firmware ISO from the ironic
conductor.

Change-Id: I6f11e3b749b648d16078e6dcdae1c37ac70f7b4c
(cherry picked from commit 8a32d84a12)
This commit is contained in:
Shivanand Tendulker 2019-07-16 02:16:25 -04:00
parent b15b266b3f
commit eeda63d4a7
2 changed files with 5 additions and 67 deletions

View File

@ -26,7 +26,6 @@ from oslo_concurrency import processutils
from oslo_serialization import base64
from proliantutils import exception
from proliantutils.ilo import client
from proliantutils import utils
@ -178,16 +177,6 @@ def update_firmware(node):
except exception.ImageRefValidationFailed as e:
raise exception.SUMOperationError(reason=e)
# Ejects the CDROM device in the iLO and inserts the SUM update ISO
# to the CDROM device.
info = node.get('driver_info')
ilo_object = client.IloClient(info.get('ilo_address'),
info.get('ilo_username'),
info.get('ilo_password'))
ilo_object.eject_virtual_media('CDROM')
ilo_object.insert_virtual_media(sum_update_iso, 'CDROM')
# Waits for the OS to detect the disk and update the label file. SPP ISO
# is identified by matching its label.
time.sleep(WAIT_TIME_DISK_LABEL_TO_BE_VISIBLE)

View File

@ -23,7 +23,6 @@ from oslo_serialization import base64
import testtools
from proliantutils import exception
from proliantutils.ilo import client as ilo_client
from proliantutils.sum import sum_controller
from proliantutils.tests.sum import sum_sample_output as constants
from proliantutils import utils
@ -162,14 +161,10 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
@mock.patch.object(os.path, 'exists')
@mock.patch.object(os, 'mkdir')
@mock.patch.object(processutils, 'execute')
@mock.patch.object(ilo_client, 'IloClient', spec_set=True, autospec=True)
def test_update_firmware(self, client_mock, execute_mock, mkdir_mock,
def test_update_firmware(self, execute_mock, mkdir_mock,
exists_mock, mkdtemp_mock, rmtree_mock,
listdir_mock, execute_sum_mock,
verify_image_mock, validate_mock):
ilo_mock_object = client_mock.return_value
eject_media_mock = ilo_mock_object.eject_virtual_media
insert_media_mock = ilo_mock_object.insert_virtual_media
execute_sum_mock.return_value = 'SUCCESS'
listdir_mock.return_value = ['SPP_LABEL']
mkdtemp_mock.return_value = "/tempdir"
@ -179,9 +174,6 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
ret_val = sum_controller.update_firmware(self.node)
eject_media_mock.assert_called_once_with('CDROM')
insert_media_mock.assert_called_once_with('http://1.2.3.4/SPP.iso',
'CDROM')
execute_mock.assert_any_call('mount', "/dev/disk/by-label/SPP_LABEL",
"/tempdir")
execute_sum_mock.assert_any_call('/tempdir/hp/swpackages/hpsum',
@ -204,14 +196,10 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
@mock.patch.object(os.path, 'exists')
@mock.patch.object(os, 'mkdir')
@mock.patch.object(processutils, 'execute')
@mock.patch.object(ilo_client, 'IloClient', spec_set=True, autospec=True)
def test_update_firmware_sum(self, client_mock, execute_mock, mkdir_mock,
def test_update_firmware_sum(self, execute_mock, mkdir_mock,
exists_mock, mkdtemp_mock, rmtree_mock,
listdir_mock, execute_sum_mock,
verify_image_mock, validate_mock):
ilo_mock_object = client_mock.return_value
eject_media_mock = ilo_mock_object.eject_virtual_media
insert_media_mock = ilo_mock_object.insert_virtual_media
execute_sum_mock.return_value = 'SUCCESS'
listdir_mock.return_value = ['SPP_LABEL']
mkdtemp_mock.return_value = "/tempdir"
@ -221,9 +209,6 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
ret_val = sum_controller.update_firmware(self.node)
eject_media_mock.assert_called_once_with('CDROM')
insert_media_mock.assert_called_once_with('http://1.2.3.4/SPP.iso',
'CDROM')
execute_mock.assert_any_call('mount', "/dev/disk/by-label/SPP_LABEL",
"/tempdir")
execute_sum_mock.assert_any_call('/tempdir/packages/smartupdate',
@ -250,31 +235,12 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
sum_controller.update_firmware, self.node)
self.assertIn(value, str(exc))
@mock.patch.object(utils, 'validate_href')
@mock.patch.object(ilo_client, 'IloClient', spec_set=True, autospec=True)
def test_update_firmware_vmedia_attach_fails(self, client_mock,
validate_mock):
ilo_mock_object = client_mock.return_value
eject_media_mock = ilo_mock_object.eject_virtual_media
value = ("Unable to attach SUM SPP iso http://1.2.3.4/SPP.iso "
"to the iLO")
eject_media_mock.side_effect = exception.IloError(value)
exc = self.assertRaises(exception.IloError,
sum_controller.update_firmware, self.node)
self.assertEqual(value, str(exc))
@mock.patch.object(utils, 'validate_href')
@mock.patch.object(os.path, 'exists')
@mock.patch.object(os, 'listdir')
@mock.patch.object(ilo_client, 'IloClient', spec_set=True, autospec=True)
def test_update_firmware_device_file_not_found(self, client_mock,
def test_update_firmware_device_file_not_found(self,
listdir_mock, exists_mock,
validate_mock):
ilo_mock_object = client_mock.return_value
eject_media_mock = ilo_mock_object.eject_virtual_media
insert_media_mock = ilo_mock_object.insert_virtual_media
listdir_mock.return_value = ['SPP_LABEL']
exists_mock.return_value = False
@ -284,22 +250,15 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
exc = self.assertRaises(exception.SUMOperationError,
sum_controller.update_firmware, self.node)
self.assertEqual(msg, str(exc))
eject_media_mock.assert_called_once_with('CDROM')
insert_media_mock.assert_called_once_with('http://1.2.3.4/SPP.iso',
'CDROM')
exists_mock.assert_called_once_with("/dev/disk/by-label/SPP_LABEL")
@mock.patch.object(utils, 'validate_href')
@mock.patch.object(utils, 'verify_image_checksum')
@mock.patch.object(os, 'listdir')
@mock.patch.object(os.path, 'exists')
@mock.patch.object(ilo_client, 'IloClient', spec_set=True, autospec=True)
def test_update_firmware_invalid_checksum(self, client_mock, exists_mock,
def test_update_firmware_invalid_checksum(self, exists_mock,
listdir_mock, verify_image_mock,
validate_mock):
ilo_mock_object = client_mock.return_value
eject_media_mock = ilo_mock_object.eject_virtual_media
insert_media_mock = ilo_mock_object.insert_virtual_media
listdir_mock.return_value = ['SPP_LABEL']
exists_mock.side_effect = [True, False]
@ -315,9 +274,6 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
verify_image_mock.assert_called_once_with(
'/dev/disk/by-label/SPP_LABEL', '1234567890')
eject_media_mock.assert_called_once_with('CDROM')
insert_media_mock.assert_called_once_with('http://1.2.3.4/SPP.iso',
'CDROM')
exists_mock.assert_called_once_with("/dev/disk/by-label/SPP_LABEL")
@mock.patch.object(utils, 'validate_href')
@ -327,14 +283,10 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
@mock.patch.object(os, 'mkdir')
@mock.patch.object(os.path, 'exists')
@mock.patch.object(os, 'listdir')
@mock.patch.object(ilo_client, 'IloClient', spec_set=True, autospec=True)
def test_update_firmware_mount_fails(self, client_mock, listdir_mock,
def test_update_firmware_mount_fails(self, listdir_mock,
exists_mock, mkdir_mock,
mkdtemp_mock, execute_mock,
verify_image_mock, validate_mock):
ilo_mock_object = client_mock.return_value
eject_media_mock = ilo_mock_object.eject_virtual_media
insert_media_mock = ilo_mock_object.insert_virtual_media
listdir_mock.return_value = ['SPP_LABEL']
exists_mock.return_value = True
mkdtemp_mock.return_value = "/tempdir"
@ -345,9 +297,6 @@ class SUMFirmwareUpdateTest(testtools.TestCase):
exc = self.assertRaises(exception.SUMOperationError,
sum_controller.update_firmware, self.node)
self.assertIn(msg, str(exc))
eject_media_mock.assert_called_once_with('CDROM')
insert_media_mock.assert_called_once_with('http://1.2.3.4/SPP.iso',
'CDROM')
exists_mock.assert_called_once_with("/dev/disk/by-label/SPP_LABEL")
@mock.patch.object(sum_controller,