Agent: Listen for connections on both IPv4 and IPv6 ports
Allow connections if deploying over a IPv6 network. Change-Id: Ied2f6be4aa4d1a70524df1df3506e596f6926e5b Closes-Bug: #1650539
This commit is contained in:
parent
51ab461af8
commit
b4e41e2dd2
@ -23,6 +23,7 @@ import time
|
|||||||
from oslo_concurrency import processutils
|
from oslo_concurrency import processutils
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
from oslo_utils import netutils
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
from six.moves.urllib import parse as urlparse
|
from six.moves.urllib import parse as urlparse
|
||||||
from stevedore import extension
|
from stevedore import extension
|
||||||
@ -365,6 +366,10 @@ class IronicPythonAgent(base.ExecuteCommandMixin):
|
|||||||
LOG.error('Neither ipa-api-url nor inspection_callback_url'
|
LOG.error('Neither ipa-api-url nor inspection_callback_url'
|
||||||
'found, please check your pxe append parameters.')
|
'found, please check your pxe append parameters.')
|
||||||
|
|
||||||
|
if netutils.is_ipv6_enabled():
|
||||||
|
# Listens to both IP versions, assuming IPV6_V6ONLY isn't enabled,
|
||||||
|
# (the default behaviour in linux)
|
||||||
|
simple_server.WSGIServer.address_family = socket.AF_INET6
|
||||||
wsgi = simple_server.make_server(
|
wsgi = simple_server.make_server(
|
||||||
self.listen_address.hostname,
|
self.listen_address.hostname,
|
||||||
self.listen_address.port,
|
self.listen_address.port,
|
||||||
|
@ -12,11 +12,13 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
from ironic_python_agent import netutils
|
||||||
|
|
||||||
# Server Specific Configurations
|
# Server Specific Configurations
|
||||||
# See https://pecan.readthedocs.org/en/latest/configuration.html#server-configuration # noqa
|
# See https://pecan.readthedocs.org/en/latest/configuration.html#server-configuration # noqa
|
||||||
server = {
|
server = {
|
||||||
'port': '9999',
|
'port': '9999',
|
||||||
'host': '0.0.0.0'
|
'host': netutils.get_wildcard_address()
|
||||||
}
|
}
|
||||||
|
|
||||||
# Pecan Application Configurations
|
# Pecan Application Configurations
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
|
|
||||||
from ironic_python_agent import inspector
|
from ironic_python_agent import inspector
|
||||||
|
from ironic_python_agent import netutils
|
||||||
from ironic_python_agent import utils
|
from ironic_python_agent import utils
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
@ -31,7 +32,9 @@ cli_opts = [
|
|||||||
'The value must start with either http:// or https://.'),
|
'The value must start with either http:// or https://.'),
|
||||||
|
|
||||||
cfg.StrOpt('listen_host',
|
cfg.StrOpt('listen_host',
|
||||||
default=APARAMS.get('ipa-listen-host', '0.0.0.0'),
|
default=APARAMS.get('ipa-listen-host',
|
||||||
|
netutils.get_wildcard_address()),
|
||||||
|
sample_default='::',
|
||||||
deprecated_name='listen-host',
|
deprecated_name='listen-host',
|
||||||
help='The IP address to listen on. '
|
help='The IP address to listen on. '
|
||||||
'Can be supplied as "ipa-listen-host" kernel parameter.'),
|
'Can be supplied as "ipa-listen-host" kernel parameter.'),
|
||||||
|
@ -220,3 +220,9 @@ def wrap_ipv6(ip):
|
|||||||
if netutils.is_valid_ipv6(ip):
|
if netutils.is_valid_ipv6(ip):
|
||||||
return "[%s]" % ip
|
return "[%s]" % ip
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
|
|
||||||
|
def get_wildcard_address():
|
||||||
|
if netutils.is_ipv6_enabled():
|
||||||
|
return "::"
|
||||||
|
return "0.0.0.0"
|
||||||
|
@ -24,6 +24,7 @@ from ironic_python_agent import agent
|
|||||||
# NOTE(lucasagomes): This import is needed so we can register the
|
# NOTE(lucasagomes): This import is needed so we can register the
|
||||||
# configuration options prior to IPA prior to starting the service
|
# configuration options prior to IPA prior to starting the service
|
||||||
from ironic_python_agent import config # noqa
|
from ironic_python_agent import config # noqa
|
||||||
|
from ironic_python_agent import netutils
|
||||||
|
|
||||||
|
|
||||||
class FunctionalBase(test_base.BaseTestCase):
|
class FunctionalBase(test_base.BaseTestCase):
|
||||||
@ -40,7 +41,8 @@ class FunctionalBase(test_base.BaseTestCase):
|
|||||||
self.agent = agent.IronicPythonAgent(
|
self.agent = agent.IronicPythonAgent(
|
||||||
api_url='http://127.0.0.1:6835',
|
api_url='http://127.0.0.1:6835',
|
||||||
advertise_address=agent.Host('localhost', 9999),
|
advertise_address=agent.Host('localhost', 9999),
|
||||||
listen_address=agent.Host('0.0.0.0', int(self.test_port)),
|
listen_address=agent.Host(netutils.get_wildcard_address(),
|
||||||
|
int(self.test_port)),
|
||||||
ip_lookup_attempts=3,
|
ip_lookup_attempts=3,
|
||||||
ip_lookup_sleep=10,
|
ip_lookup_sleep=10,
|
||||||
network_interface=None,
|
network_interface=None,
|
||||||
|
5
releasenotes/notes/ipv6-listen-85d40e58156e398f.yaml
Normal file
5
releasenotes/notes/ipv6-listen-85d40e58156e398f.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- If booted into a kernel that supports IPv6 Ironic Python Agent
|
||||||
|
now listens for connections on both the IPv4 and IPv6 wildcard
|
||||||
|
address.
|
Loading…
Reference in New Issue
Block a user