Check if virtual media is attached before ejecting
This commit changes eject_virtual_media in RIBCL to check if virtual media is attached before trying to eject it. This will no longer raise exception if virtual media is not attached. Change-Id: If76671b706e97fa52814e61d9403292289a19e6d Partial-Bug: 1466729
This commit is contained in:
@@ -353,10 +353,13 @@ class RIBCLOperations(operations.IloOperations):
|
||||
|
||||
def eject_virtual_media(self, device='FLOPPY'):
|
||||
"""Ejects the Virtual Media image if one is inserted."""
|
||||
vm_status = self.get_vm_status(device=device)
|
||||
if vm_status['IMAGE_INSERTED'] == 'NO':
|
||||
return
|
||||
|
||||
dic = {'DEVICE': device.upper()}
|
||||
data = self._execute_command(
|
||||
self._execute_command(
|
||||
'EJECT_VIRTUAL_MEDIA', 'RIB_INFO', 'write', dic)
|
||||
return data
|
||||
|
||||
def set_vm_status(self, device='FLOPPY',
|
||||
boot_option='BOOT_ONCE', write_protect='YES'):
|
||||
|
||||
@@ -402,29 +402,32 @@ INSERT_VIRTUAL_MEDIA_XML = '''
|
||||
</RIBCL>
|
||||
'''
|
||||
|
||||
|
||||
EJECT_VIRTUAL_MEDIA_XML = '''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0"?>\r
|
||||
<RIBCL VERSION="2.23">
|
||||
<RESPONSE STATUS="0x0000" MESSAGE="No error" />
|
||||
<RESPONSE
|
||||
STATUS="0x0000"
|
||||
MESSAGE=\'No error\'
|
||||
/>
|
||||
</RIBCL>
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0"?>\r
|
||||
<RIBCL VERSION="2.23">
|
||||
<RESPONSE STATUS="0x0000" MESSAGE="No error" />
|
||||
<RESPONSE
|
||||
STATUS="0x0000"
|
||||
MESSAGE=\'No error\'
|
||||
/>
|
||||
</RIBCL>
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0"?>\r
|
||||
<RIBCL VERSION="2.23">
|
||||
<RESPONSE STATUS="0x0000" MESSAGE="No error" />
|
||||
</RIBCL>
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<RIBCL VERSION="2.23">
|
||||
<RESPONSE STATUS="0x0039"
|
||||
MESSAGE="No image present in the Virtual Media drive" />
|
||||
<RESPONSE
|
||||
STATUS="0x0000"
|
||||
MESSAGE=\'No error\'
|
||||
/>
|
||||
</RIBCL>
|
||||
'''
|
||||
|
||||
|
||||
SET_HOST_POWER_XML = '''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<RIBCL VERSION="2.23">
|
||||
|
||||
@@ -228,10 +228,26 @@ class IloRibclTestCase(unittest.TestCase):
|
||||
self.assertIsNone(result)
|
||||
self.assertTrue(request_ilo_mock.called)
|
||||
|
||||
@mock.patch.object(ribcl.RIBCLOperations, 'get_vm_status')
|
||||
@mock.patch.object(ribcl.RIBCLOperations, '_request_ilo')
|
||||
def test_eject_virtual_media(self, request_ilo_mock):
|
||||
def test_eject_virtual_media_no_media(
|
||||
self, request_ilo_mock, get_vm_status_mock):
|
||||
"""Ensure we don't try to eject media when no media is present."""
|
||||
get_vm_status_mock.return_value = {'IMAGE_INSERTED': 'NO'}
|
||||
self.ilo.eject_virtual_media(device='FLOPPY')
|
||||
get_vm_status_mock.assert_called_once_with(device='FLOPPY')
|
||||
self.assertFalse(request_ilo_mock.called)
|
||||
|
||||
@mock.patch.object(ribcl.RIBCLOperations, 'get_vm_status')
|
||||
@mock.patch.object(ribcl.RIBCLOperations, '_request_ilo')
|
||||
def test_eject_virtual_media(
|
||||
self, request_ilo_mock, get_vm_status_mock):
|
||||
"""Ensure we try to eject media when media is present."""
|
||||
get_vm_status_mock.return_value = {'IMAGE_INSERTED': 'YES'}
|
||||
request_ilo_mock.return_value = constants.EJECT_VIRTUAL_MEDIA_XML
|
||||
self.assertRaises(exception.IloError, self.ilo.eject_virtual_media)
|
||||
self.ilo.eject_virtual_media(device='CDROM')
|
||||
get_vm_status_mock.assert_called_once_with(device='CDROM')
|
||||
request_ilo_mock.assert_called_once_with(mock.ANY)
|
||||
|
||||
@mock.patch.object(ribcl.RIBCLOperations, '_request_ilo')
|
||||
def test_set_vm_status(self, request_ilo_mock):
|
||||
@@ -759,10 +775,14 @@ class IloRibclTestCaseBeforeRisSupport(unittest.TestCase):
|
||||
self.assertIsNone(result)
|
||||
self.assertTrue(request_ilo_mock.called)
|
||||
|
||||
@mock.patch.object(ribcl.RIBCLOperations, 'get_vm_status')
|
||||
@mock.patch.object(ribcl.IloClient, '_request_ilo')
|
||||
def test_eject_virtual_media(self, request_ilo_mock):
|
||||
def test_eject_virtual_media(self, request_ilo_mock, get_vm_status_mock):
|
||||
get_vm_status_mock.return_value = {'IMAGE_INSERTED': 'YES'}
|
||||
request_ilo_mock.return_value = constants.EJECT_VIRTUAL_MEDIA_XML
|
||||
self.assertRaises(ribcl.IloError, self.ilo.eject_virtual_media)
|
||||
self.assertIsNone(self.ilo.eject_virtual_media(device='CDROM'))
|
||||
get_vm_status_mock.assert_called_once_with(device='CDROM')
|
||||
request_ilo_mock.assert_called_once_with(mock.ANY)
|
||||
|
||||
@mock.patch.object(ribcl.IloClient, '_request_ilo')
|
||||
def test_set_vm_status(self, request_ilo_mock):
|
||||
|
||||
Reference in New Issue
Block a user