diff options
author | Kaifeng Wang <kaifeng.w@gmail.com> | 2020-08-03 15:38:58 +0000 |
---|---|---|
committer | Kaifeng Wang <kaifeng.w@gmail.com> | 2020-08-05 22:46:24 +0800 |
commit | 07a7a269bb34702d1922fe58b98c209674c08e33 (patch) | |
tree | a17d3d12d8c1f3c951df90edd598521c41ed402e /ironic/drivers/modules/ipmitool.py | |
parent | 35e76ad82ddc0fb0390a5f1b9bcc452558b782c4 (diff) | |
download | ironic-07a7a269bb34702d1922fe58b98c209674c08e33.tar.gz |
Fix console auto port allocation under IPv6
By default _verify_port() only works for IPv4 network, the same port can be
allocated to multiple nodes in a IPv6 network because the port checking
passed and be used for other nodes.
This fix passes the socat_address to the port validation and use the
correct address family to do the socket binding.
Story: 2007946
Task: 40412
Change-Id: I1355afaa551baee7b9fd7883d2d29342d059c5a0
Diffstat (limited to 'ironic/drivers/modules/ipmitool.py')
-rw-r--r-- | ironic/drivers/modules/ipmitool.py | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/ironic/drivers/modules/ipmitool.py b/ironic/drivers/modules/ipmitool.py index 85beca183..a3b443b58 100644 --- a/ironic/drivers/modules/ipmitool.py +++ b/ironic/drivers/modules/ipmitool.py @@ -807,10 +807,10 @@ def _constructor_checks(driver): _check_temp_dir() -def _allocate_port(task): +def _allocate_port(task, host=None): node = task.node dii = node.driver_internal_info or {} - allocated_port = console_utils.acquire_port() + allocated_port = console_utils.acquire_port(host=host) dii['allocated_ipmi_terminal_port'] = allocated_port node.driver_internal_info = dii node.save() @@ -1411,7 +1411,8 @@ class IPMISocatConsole(IPMIConsole): """ driver_info = _parse_driver_info(task.node) if not driver_info['port']: - driver_info['port'] = _allocate_port(task) + driver_info['port'] = _allocate_port( + task, host=CONF.console.socat_address) try: self._exec_stop_console(driver_info) |