Merge "Prepare for deprecation of iscsi_verify_attempts in ironic-lib"
This commit is contained in:
commit
222fd5f595
@ -27,7 +27,15 @@ opts = [
|
|||||||
help=_('Flags that need to be sent to the dd command, '
|
help=_('Flags that need to be sent to the dd command, '
|
||||||
'to control the conversion of the original file '
|
'to control the conversion of the original file '
|
||||||
'when copying to the host. It can contain several '
|
'when copying to the host. It can contain several '
|
||||||
'options separated by commas.'))
|
'options separated by commas.')),
|
||||||
|
# TODO(dtantsur): update in Ussuri when the deprecated option is removed
|
||||||
|
# from ironic-lib.
|
||||||
|
cfg.IntOpt('verify_attempts',
|
||||||
|
min=1,
|
||||||
|
help=_('Maximum attempts to verify an iSCSI connection is '
|
||||||
|
'active, sleeping 1 second between attempts. Defaults '
|
||||||
|
'to the deprecated [disk_utils]iscsi_verify_attempts '
|
||||||
|
'option, after its removal will default to 3.')),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,6 +88,15 @@ def _get_ironic_session():
|
|||||||
return _IRONIC_SESSION
|
return _IRONIC_SESSION
|
||||||
|
|
||||||
|
|
||||||
|
# TODO(dtantsur): just use CONF.iscsi.verify_attempts when
|
||||||
|
# iscsi_verify_attempts is removed from ironic-lib.
|
||||||
|
def _iscsi_verify_attempts():
|
||||||
|
# Be prepared for eventual removal, hardcode the default of 3
|
||||||
|
return (getattr(CONF.disk_utils, 'iscsi_verify_attempts', 3)
|
||||||
|
if CONF.iscsi.verify_attempts is None
|
||||||
|
else CONF.iscsi.verify_attempts)
|
||||||
|
|
||||||
|
|
||||||
def _wrap_ipv6(ip):
|
def _wrap_ipv6(ip):
|
||||||
if netutils.is_valid_ipv6(ip):
|
if netutils.is_valid_ipv6(ip):
|
||||||
return "[%s]" % ip
|
return "[%s]" % ip
|
||||||
@ -185,7 +194,7 @@ def check_file_system_for_iscsi_device(portal_address,
|
|||||||
check_dir = "/dev/disk/by-path/ip-%s:%s-iscsi-%s-lun-1" % (portal_address,
|
check_dir = "/dev/disk/by-path/ip-%s:%s-iscsi-%s-lun-1" % (portal_address,
|
||||||
portal_port,
|
portal_port,
|
||||||
target_iqn)
|
target_iqn)
|
||||||
total_checks = CONF.disk_utils.iscsi_verify_attempts
|
total_checks = _iscsi_verify_attempts()
|
||||||
for attempt in range(total_checks):
|
for attempt in range(total_checks):
|
||||||
if os.path.exists(check_dir):
|
if os.path.exists(check_dir):
|
||||||
break
|
break
|
||||||
@ -209,7 +218,8 @@ def verify_iscsi_connection(target_iqn):
|
|||||||
"""Verify iscsi connection."""
|
"""Verify iscsi connection."""
|
||||||
LOG.debug("Checking for iSCSI target to become active.")
|
LOG.debug("Checking for iSCSI target to become active.")
|
||||||
|
|
||||||
for attempt in range(CONF.disk_utils.iscsi_verify_attempts):
|
total_checks = _iscsi_verify_attempts()
|
||||||
|
for attempt in range(total_checks):
|
||||||
out, _err = utils.execute('iscsiadm',
|
out, _err = utils.execute('iscsiadm',
|
||||||
'-m', 'node',
|
'-m', 'node',
|
||||||
'-S',
|
'-S',
|
||||||
@ -220,11 +230,10 @@ def verify_iscsi_connection(target_iqn):
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
LOG.debug("iSCSI connection not active. Rechecking. Attempt "
|
LOG.debug("iSCSI connection not active. Rechecking. Attempt "
|
||||||
"%(attempt)d out of %(total)d",
|
"%(attempt)d out of %(total)d",
|
||||||
{"attempt": attempt + 1,
|
{"attempt": attempt + 1, "total": total_checks})
|
||||||
"total": CONF.disk_utils.iscsi_verify_attempts})
|
|
||||||
else:
|
else:
|
||||||
msg = _("iSCSI connection did not become active after attempting to "
|
msg = _("iSCSI connection did not become active after attempting to "
|
||||||
"verify %d times.") % CONF.disk_utils.iscsi_verify_attempts
|
"verify %d times.") % total_checks
|
||||||
LOG.error(msg)
|
LOG.error(msg)
|
||||||
raise exception.InstanceDeployFailure(msg)
|
raise exception.InstanceDeployFailure(msg)
|
||||||
|
|
||||||
|
@ -645,6 +645,15 @@ class PhysicalWorkTestCase(tests_base.TestCase):
|
|||||||
utils.verify_iscsi_connection, iqn)
|
utils.verify_iscsi_connection, iqn)
|
||||||
self.assertEqual(3, mock_exec.call_count)
|
self.assertEqual(3, mock_exec.call_count)
|
||||||
|
|
||||||
|
@mock.patch.object(common_utils, 'execute', autospec=True)
|
||||||
|
def test_verify_iscsi_connection_override_attempts(self, mock_exec):
|
||||||
|
utils.CONF.set_override('verify_attempts', 2, group='iscsi')
|
||||||
|
iqn = 'iqn.xyz'
|
||||||
|
mock_exec.return_value = ['iqn.abc', '']
|
||||||
|
self.assertRaises(exception.InstanceDeployFailure,
|
||||||
|
utils.verify_iscsi_connection, iqn)
|
||||||
|
self.assertEqual(2, mock_exec.call_count)
|
||||||
|
|
||||||
@mock.patch.object(os.path, 'exists', autospec=True)
|
@mock.patch.object(os.path, 'exists', autospec=True)
|
||||||
def test_check_file_system_for_iscsi_device_raises(self, mock_os):
|
def test_check_file_system_for_iscsi_device_raises(self, mock_os):
|
||||||
iqn = 'iqn.xyz'
|
iqn = 'iqn.xyz'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user