Skip to content

Commit 1c493c4

Browse files
committed
iscsi: Listen for connections on both IPv4 and IPv6 ports
Allow connections if deploying over a IPv6 network. Change-Id: Ib5b97e960fcb30b9a37c5971e88d5251905f8113 Closes-Bug: #1650540
1 parent b4e41e2 commit 1c493c4

3 files changed

Lines changed: 35 additions & 3 deletions

File tree

ironic_python_agent/extensions/iscsi.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from ironic_python_agent import errors
2929
from ironic_python_agent.extensions import base
3030
from ironic_python_agent import hardware
31+
from ironic_python_agent import netutils
3132
from ironic_python_agent import utils
3233

3334
LOG = log.getLogger(__name__)
@@ -99,7 +100,8 @@ def _start_lio(iqn, portal_port, device):
99100

100101
try:
101102
# bind to the default port on all interfaces
102-
rtslib_fb.NetworkPortal(tpg, '0.0.0.0', portal_port)
103+
listen_ip = netutils.wrap_ipv6(netutils.get_wildcard_address())
104+
rtslib_fb.NetworkPortal(tpg, listen_ip, portal_port)
103105
except rtslib_fb.utils.RTSLibError as exc:
104106
msg = 'Failed to publish a target: {}'.format(exc)
105107
raise errors.ISCSIError(msg)

ironic_python_agent/tests/unit/extensions/test_iscsi.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,30 @@ def test_start_iscsi_target(self, mock_rtslib, mock_dispatch,
157157
mock_dispatch.return_value = self.fake_dev
158158
result = self.agent_extension.start_iscsi_target(iqn=self.fake_iqn)
159159

160+
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
161+
result.command_result)
162+
mock_rtslib.BlockStorageObject.assert_called_once_with(
163+
name=self.fake_iqn, dev=self.fake_dev)
164+
mock_rtslib.Target.assert_called_once_with(mock.ANY, self.fake_iqn,
165+
mode='create')
166+
mock_rtslib.TPG.assert_called_once_with(
167+
mock_rtslib.Target.return_value, mode='create')
168+
mock_rtslib.LUN.assert_called_once_with(
169+
mock_rtslib.TPG.return_value,
170+
storage_object=mock_rtslib.BlockStorageObject.return_value,
171+
lun=1)
172+
mock_rtslib.NetworkPortal.assert_called_once_with(
173+
mock_rtslib.TPG.return_value, '[::]', 3260)
174+
self.assertFalse(mock_destroy.called)
175+
176+
@mock.patch('ironic_python_agent.netutils.get_wildcard_address')
177+
def test_start_iscsi_target_noipv6(self, mock_get_wildcard_address,
178+
mock_rtslib, mock_dispatch,
179+
mock_destroy):
180+
mock_get_wildcard_address.return_value = '0.0.0.0'
181+
mock_dispatch.return_value = self.fake_dev
182+
result = self.agent_extension.start_iscsi_target(iqn=self.fake_iqn)
183+
160184
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
161185
result.command_result)
162186
mock_rtslib.BlockStorageObject.assert_called_once_with(
@@ -193,7 +217,7 @@ def test_start_iscsi_target_with_special_port(self, mock_rtslib,
193217
storage_object=mock_rtslib.BlockStorageObject.return_value,
194218
lun=1)
195219
mock_rtslib.NetworkPortal.assert_called_once_with(
196-
mock_rtslib.TPG.return_value, '0.0.0.0', 3266)
220+
mock_rtslib.TPG.return_value, '[::]', 3266)
197221

198222
def test_failed_to_start_iscsi(self, mock_rtslib, mock_dispatch,
199223
mock_destroy):
@@ -223,7 +247,7 @@ def test_failed_to_bind_iscsi(self, mock_rtslib, mock_dispatch,
223247
storage_object=mock_rtslib.BlockStorageObject.return_value,
224248
lun=1)
225249
mock_rtslib.NetworkPortal.assert_called_once_with(
226-
mock_rtslib.TPG.return_value, '0.0.0.0', 3260)
250+
mock_rtslib.TPG.return_value, '[::]', 3260)
227251
self.assertFalse(mock_destroy.called)
228252

229253
def test_failed_to_start_iscsi_wipe_disk_metadata(self, mock_rtslib,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
fixes:
3+
- If using Linux-IO, ISCSI targets now support deploying over
4+
a IPv6 network if booted into a IPv6 enabled kernel. IPv6 will
5+
be used for deployments for all traffic between ironic and IPA
6+
if IPA is passed a IPv6 address in the Ironic api url.

0 commit comments

Comments
 (0)