Merge "determine tgtd ready status through tgtadm"
This commit is contained in:
commit
39bdbdd357
ironic_python_agent
@ -15,8 +15,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
import time
|
||||
|
||||
from oslo_concurrency import processutils
|
||||
from oslo_log import log
|
||||
@ -30,27 +28,20 @@ from ironic_python_agent import utils
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
def _execute(cmd, error_msg, check_exit_code=None):
|
||||
if check_exit_code is None:
|
||||
check_exit_code = [0]
|
||||
|
||||
def _execute(cmd, error_msg, **kwargs):
|
||||
try:
|
||||
stdout, stderr = utils.execute(*cmd, check_exit_code=check_exit_code)
|
||||
stdout, stderr = utils.execute(*cmd, **kwargs)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
LOG.error(error_msg)
|
||||
raise errors.ISCSIError(error_msg, e.exit_code, e.stdout, e.stderr)
|
||||
|
||||
|
||||
def _wait_for_iscsi_daemon(interval=1, attempts=10):
|
||||
def _wait_for_iscsi_daemon(attempts=10):
|
||||
"""Wait for the ISCSI daemon to start."""
|
||||
for attempt in range(attempts):
|
||||
if os.path.exists("/var/run/tgtd.ipc_abstract_namespace.0"):
|
||||
break
|
||||
time.sleep(interval)
|
||||
else:
|
||||
error_msg = "ISCSI daemon didn't initialize"
|
||||
LOG.error(error_msg)
|
||||
raise errors.ISCSIError(error_msg, 1, '', error_msg)
|
||||
# here, iscsi daemon is considered not running in case
|
||||
# tgtadm is not able to talk to tgtd to show iscsi targets
|
||||
cmd = ['tgtadm', '--lld', 'iscsi', '--mode', 'target', '--op', 'show']
|
||||
_execute(cmd, "ISCSI daemon didn't initialize", attempts=attempts)
|
||||
|
||||
|
||||
def _start_iscsi_daemon(iqn, device):
|
||||
|
@ -16,7 +16,6 @@
|
||||
# under the License.
|
||||
|
||||
import mock
|
||||
import os
|
||||
import time
|
||||
|
||||
from oslo_concurrency import processutils
|
||||
@ -39,41 +38,44 @@ class TestISCSIExtension(test_base.BaseTestCase):
|
||||
self.fake_dev = '/dev/fake'
|
||||
self.fake_iqn = 'iqn-fake'
|
||||
|
||||
@mock.patch.object(iscsi, '_wait_for_iscsi_daemon')
|
||||
def test_start_iscsi_target(self, mock_wait_iscsi, mock_execute,
|
||||
mock_dispatch):
|
||||
def test_start_iscsi_target(self, mock_execute, mock_dispatch):
|
||||
mock_dispatch.return_value = self.fake_dev
|
||||
mock_execute.return_value = ('', '')
|
||||
result = self.agent_extension.start_iscsi_target(iqn=self.fake_iqn)
|
||||
|
||||
expected = [mock.call('tgtd', check_exit_code=[0]),
|
||||
expected = [mock.call('tgtd'),
|
||||
mock.call('tgtadm', '--lld', 'iscsi', '--mode',
|
||||
'target', '--op', 'show', attempts=10),
|
||||
mock.call('tgtadm', '--lld', 'iscsi', '--mode',
|
||||
'target', '--op', 'new', '--tid', '1',
|
||||
'--targetname', self.fake_iqn,
|
||||
check_exit_code=[0]),
|
||||
'--targetname', self.fake_iqn),
|
||||
mock.call('tgtadm', '--lld', 'iscsi', '--mode',
|
||||
'logicalunit', '--op', 'new', '--tid', '1',
|
||||
'--lun', '1', '--backing-store',
|
||||
self.fake_dev, check_exit_code=[0]),
|
||||
'--lun', '1', '--backing-store', self.fake_dev),
|
||||
mock.call('tgtadm', '--lld', 'iscsi', '--mode', 'target',
|
||||
'--op', 'bind', '--tid', '1',
|
||||
'--initiator-address', 'ALL',
|
||||
check_exit_code=[0])]
|
||||
'--initiator-address', 'ALL')]
|
||||
mock_execute.assert_has_calls(expected)
|
||||
mock_dispatch.assert_called_once_with('get_os_install_device')
|
||||
mock_wait_iscsi.assert_called_once_with()
|
||||
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
|
||||
result.command_result)
|
||||
|
||||
@mock.patch.object(os.path, 'exists', lambda x: False)
|
||||
def test_start_iscsi_target_fail_wait_daemon(self, mock_execute,
|
||||
mock_dispatch):
|
||||
mock_dispatch.return_value = self.fake_dev
|
||||
mock_execute.return_value = ('', '')
|
||||
# side effects here:
|
||||
# - execute tgtd: stdout=='', stderr==''
|
||||
# - induce tgtadm failure while in _wait_for_scsi_daemon
|
||||
mock_execute.side_effect = [('', ''),
|
||||
processutils.ProcessExecutionError('blah')]
|
||||
self.assertRaises(errors.ISCSIError,
|
||||
self.agent_extension.start_iscsi_target,
|
||||
iqn=self.fake_iqn)
|
||||
mock_execute.assert_called_once_with('tgtd', check_exit_code=[0])
|
||||
expected = [mock.call('tgtd'),
|
||||
mock.call('tgtadm', '--lld', 'iscsi', '--mode', 'target',
|
||||
'--op', 'show', attempts=10)]
|
||||
|
||||
mock_execute.assert_has_calls(expected)
|
||||
mock_dispatch.assert_called_once_with('get_os_install_device')
|
||||
|
||||
@mock.patch.object(iscsi, '_wait_for_iscsi_daemon')
|
||||
@ -86,10 +88,9 @@ class TestISCSIExtension(test_base.BaseTestCase):
|
||||
self.agent_extension.start_iscsi_target,
|
||||
iqn=self.fake_iqn)
|
||||
|
||||
expected = [mock.call('tgtd', check_exit_code=[0]),
|
||||
expected = [mock.call('tgtd'),
|
||||
mock.call('tgtadm', '--lld', 'iscsi', '--mode',
|
||||
'target', '--op', 'new', '--tid', '1',
|
||||
'--targetname', self.fake_iqn,
|
||||
check_exit_code=[0])]
|
||||
'--targetname', self.fake_iqn)]
|
||||
mock_execute.assert_has_calls(expected)
|
||||
mock_dispatch.assert_called_once_with('get_os_install_device')
|
||||
|
Loading…
x
Reference in New Issue
Block a user