Merge "iscsi: Listen for connections on both IPv4 and IPv6 ports"
This commit is contained in:
commit
bbbea4601a
ironic_python_agent
releasenotes/notes
@ -26,6 +26,7 @@ except ImportError:
|
||||
from ironic_python_agent import errors
|
||||
from ironic_python_agent.extensions import base
|
||||
from ironic_python_agent import hardware
|
||||
from ironic_python_agent import netutils
|
||||
from ironic_python_agent import utils
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
@ -97,7 +98,8 @@ def _start_lio(iqn, portal_port, device):
|
||||
|
||||
try:
|
||||
# bind to the default port on all interfaces
|
||||
rtslib_fb.NetworkPortal(tpg, '0.0.0.0', portal_port)
|
||||
listen_ip = netutils.wrap_ipv6(netutils.get_wildcard_address())
|
||||
rtslib_fb.NetworkPortal(tpg, listen_ip, portal_port)
|
||||
except rtslib_fb.utils.RTSLibError as exc:
|
||||
msg = 'Failed to publish a target: {}'.format(exc)
|
||||
raise errors.ISCSIError(msg)
|
||||
|
@ -155,6 +155,30 @@ class TestISCSIExtensionLIO(test_base.BaseTestCase):
|
||||
mock_dispatch.return_value = self.fake_dev
|
||||
result = self.agent_extension.start_iscsi_target(iqn=self.fake_iqn)
|
||||
|
||||
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
|
||||
result.command_result)
|
||||
mock_rtslib.BlockStorageObject.assert_called_once_with(
|
||||
name=self.fake_iqn, dev=self.fake_dev)
|
||||
mock_rtslib.Target.assert_called_once_with(mock.ANY, self.fake_iqn,
|
||||
mode='create')
|
||||
mock_rtslib.TPG.assert_called_once_with(
|
||||
mock_rtslib.Target.return_value, mode='create')
|
||||
mock_rtslib.LUN.assert_called_once_with(
|
||||
mock_rtslib.TPG.return_value,
|
||||
storage_object=mock_rtslib.BlockStorageObject.return_value,
|
||||
lun=1)
|
||||
mock_rtslib.NetworkPortal.assert_called_once_with(
|
||||
mock_rtslib.TPG.return_value, '[::]', 3260)
|
||||
self.assertFalse(mock_destroy.called)
|
||||
|
||||
@mock.patch('ironic_python_agent.netutils.get_wildcard_address')
|
||||
def test_start_iscsi_target_noipv6(self, mock_get_wildcard_address,
|
||||
mock_rtslib, mock_dispatch,
|
||||
mock_destroy):
|
||||
mock_get_wildcard_address.return_value = '0.0.0.0'
|
||||
mock_dispatch.return_value = self.fake_dev
|
||||
result = self.agent_extension.start_iscsi_target(iqn=self.fake_iqn)
|
||||
|
||||
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
|
||||
result.command_result)
|
||||
mock_rtslib.BlockStorageObject.assert_called_once_with(
|
||||
@ -191,7 +215,7 @@ class TestISCSIExtensionLIO(test_base.BaseTestCase):
|
||||
storage_object=mock_rtslib.BlockStorageObject.return_value,
|
||||
lun=1)
|
||||
mock_rtslib.NetworkPortal.assert_called_once_with(
|
||||
mock_rtslib.TPG.return_value, '0.0.0.0', 3266)
|
||||
mock_rtslib.TPG.return_value, '[::]', 3266)
|
||||
|
||||
def test_failed_to_start_iscsi(self, mock_rtslib, mock_dispatch,
|
||||
mock_destroy):
|
||||
@ -221,7 +245,7 @@ class TestISCSIExtensionLIO(test_base.BaseTestCase):
|
||||
storage_object=mock_rtslib.BlockStorageObject.return_value,
|
||||
lun=1)
|
||||
mock_rtslib.NetworkPortal.assert_called_once_with(
|
||||
mock_rtslib.TPG.return_value, '0.0.0.0', 3260)
|
||||
mock_rtslib.TPG.return_value, '[::]', 3260)
|
||||
self.assertFalse(mock_destroy.called)
|
||||
|
||||
def test_failed_to_start_iscsi_wipe_disk_metadata(self, mock_rtslib,
|
||||
|
6
releasenotes/notes/ipv6-provision-42e9000f6f6a7a3a.yaml
Normal file
6
releasenotes/notes/ipv6-provision-42e9000f6f6a7a3a.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- If using Linux-IO, ISCSI targets now support deploying over
|
||||
a IPv6 network if booted into a IPv6 enabled kernel. IPv6 will
|
||||
be used for deployments for all traffic between ironic and IPA
|
||||
if IPA is passed a IPv6 address in the Ironic api url.
|
Loading…
x
Reference in New Issue
Block a user