Utilize the JSON-RPC port
Adds storage of the json-rpc port number to the conductor hostname to enable rpc clients to understand which rpc servies they need to connect to. Depends-On: https://review.opendev.org/c/openstack/ironic-lib/+/879211 Change-Id: I6021152c83ab5025a9a9e6d8d24c64278c4c1053
This commit is contained in:
parent
9f7218243b
commit
c84fe147a3
@ -575,7 +575,7 @@ RELEASE_MAPPING = {
|
|||||||
},
|
},
|
||||||
'master': {
|
'master': {
|
||||||
'api': '1.87',
|
'api': '1.87',
|
||||||
'rpc': '1.57',
|
'rpc': '1.58',
|
||||||
'objects': {
|
'objects': {
|
||||||
'Allocation': ['1.1'],
|
'Allocation': ['1.1'],
|
||||||
'BIOSSetting': ['1.1'],
|
'BIOSSetting': ['1.1'],
|
||||||
|
@ -24,6 +24,7 @@ from ironic_lib import mdns
|
|||||||
from oslo_db import exception as db_exception
|
from oslo_db import exception as db_exception
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
|
from oslo_utils import netutils
|
||||||
from oslo_utils import versionutils
|
from oslo_utils import versionutils
|
||||||
|
|
||||||
from ironic.common import context as ironic_context
|
from ironic.common import context as ironic_context
|
||||||
@ -73,6 +74,15 @@ class BaseConductorManager(object):
|
|||||||
Under normal operation, this is also when the initial database
|
Under normal operation, this is also when the initial database
|
||||||
connectivity is established for the conductor's normal operation.
|
connectivity is established for the conductor's normal operation.
|
||||||
"""
|
"""
|
||||||
|
# Determine the hostname to utilize/register
|
||||||
|
if (CONF.rpc_transport == 'json-rpc'
|
||||||
|
and CONF.json_rpc.port != 8089
|
||||||
|
and self._use_jsonrpc_port()):
|
||||||
|
# in the event someone configures self.host
|
||||||
|
# as an ipv6 address...
|
||||||
|
host = netutils.escape_ipv6(self.host)
|
||||||
|
self.host = f'{host}:{CONF.json_rpc.port}'
|
||||||
|
|
||||||
# NOTE(TheJulia) We need to clear locks early on in the process
|
# NOTE(TheJulia) We need to clear locks early on in the process
|
||||||
# of starting where the database shows we still hold them.
|
# of starting where the database shows we still hold them.
|
||||||
# This must be done before we re-register our existence in the
|
# This must be done before we re-register our existence in the
|
||||||
@ -224,6 +234,13 @@ class BaseConductorManager(object):
|
|||||||
|
|
||||||
self._started = True
|
self._started = True
|
||||||
|
|
||||||
|
def _use_jsonrpc_port(self):
|
||||||
|
"""Determines if the JSON-RPC port can be used."""
|
||||||
|
release_ver = versions.RELEASE_MAPPING.get(CONF.pin_release_version)
|
||||||
|
version_cap = (release_ver['rpc'] if release_ver
|
||||||
|
else self.RPC_API_VERSION)
|
||||||
|
return versionutils.is_compatible('1.58', version_cap)
|
||||||
|
|
||||||
def _use_groups(self):
|
def _use_groups(self):
|
||||||
release_ver = versions.RELEASE_MAPPING.get(CONF.pin_release_version)
|
release_ver = versions.RELEASE_MAPPING.get(CONF.pin_release_version)
|
||||||
# NOTE(jroll) self.RPC_API_VERSION is actually defined in a subclass,
|
# NOTE(jroll) self.RPC_API_VERSION is actually defined in a subclass,
|
||||||
|
@ -94,7 +94,7 @@ class ConductorManager(base_manager.BaseConductorManager):
|
|||||||
# NOTE(rloo): This must be in sync with rpcapi.ConductorAPI's.
|
# NOTE(rloo): This must be in sync with rpcapi.ConductorAPI's.
|
||||||
# NOTE(pas-ha): This also must be in sync with
|
# NOTE(pas-ha): This also must be in sync with
|
||||||
# ironic.common.release_mappings.RELEASE_MAPPING['master']
|
# ironic.common.release_mappings.RELEASE_MAPPING['master']
|
||||||
RPC_API_VERSION = '1.57'
|
RPC_API_VERSION = '1.58'
|
||||||
|
|
||||||
target = messaging.Target(version=RPC_API_VERSION)
|
target = messaging.Target(version=RPC_API_VERSION)
|
||||||
|
|
||||||
|
@ -154,12 +154,13 @@ class ConductorAPI(object):
|
|||||||
| 1.55 - Added change_node_boot_mode
|
| 1.55 - Added change_node_boot_mode
|
||||||
| 1.56 - Added continue_inspection
|
| 1.56 - Added continue_inspection
|
||||||
| 1.57 - Added do_node_service
|
| 1.57 - Added do_node_service
|
||||||
|
| 1.58 - Added support for json-rpc port usage
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# NOTE(rloo): This must be in sync with manager.ConductorManager's.
|
# NOTE(rloo): This must be in sync with manager.ConductorManager's.
|
||||||
# NOTE(pas-ha): This also must be in sync with
|
# NOTE(pas-ha): This also must be in sync with
|
||||||
# ironic.common.release_mappings.RELEASE_MAPPING['master']
|
# ironic.common.release_mappings.RELEASE_MAPPING['master']
|
||||||
RPC_API_VERSION = '1.57'
|
RPC_API_VERSION = '1.58'
|
||||||
|
|
||||||
def __init__(self, topic=None):
|
def __init__(self, topic=None):
|
||||||
super(ConductorAPI, self).__init__()
|
super(ConductorAPI, self).__init__()
|
||||||
|
@ -311,6 +311,33 @@ class StartStopTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
|
|||||||
# 3 without reuse of the database connection.
|
# 3 without reuse of the database connection.
|
||||||
self.assertEqual(2, mock_dbapi.call_count)
|
self.assertEqual(2, mock_dbapi.call_count)
|
||||||
|
|
||||||
|
def test_start_with_json_rpc(self):
|
||||||
|
CONF.set_override('rpc_transport', 'json-rpc')
|
||||||
|
CONF.set_override('host', 'foo.bar.baz')
|
||||||
|
self._start_service()
|
||||||
|
res = objects.Conductor.get_by_hostname(self.context, self.hostname)
|
||||||
|
self.assertEqual(self.hostname, res['hostname'])
|
||||||
|
|
||||||
|
def test_start_with_json_rpc_port(self):
|
||||||
|
CONF.set_override('rpc_transport', 'json-rpc')
|
||||||
|
CONF.set_override('host', 'foo.bar.baz')
|
||||||
|
CONF.set_override('port', 8192, group='json_rpc')
|
||||||
|
|
||||||
|
self._start_service()
|
||||||
|
res = objects.Conductor.get_by_hostname(self.context,
|
||||||
|
self.service.host)
|
||||||
|
self.assertEqual(f'{self.hostname}:8192', res['hostname'])
|
||||||
|
|
||||||
|
def test_start_without_jsonrpc_port_pined_version(self):
|
||||||
|
CONF.set_override('rpc_transport', 'json-rpc')
|
||||||
|
CONF.set_override('host', 'foo.bar.baz')
|
||||||
|
CONF.set_override('port', 8192, group='json_rpc')
|
||||||
|
CONF.set_override('pin_release_version', '21.4')
|
||||||
|
self._start_service()
|
||||||
|
res = objects.Conductor.get_by_hostname(self.context,
|
||||||
|
self.service.host)
|
||||||
|
self.assertEqual(self.hostname, res['hostname'])
|
||||||
|
|
||||||
|
|
||||||
class KeepAliveTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
|
class KeepAliveTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
|
||||||
def test__conductor_service_record_keepalive(self):
|
def test__conductor_service_record_keepalive(self):
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
features:
|
||||||
|
- |
|
||||||
|
Adds the storage of the ``[json_rpc]port`` configuration value to the
|
||||||
|
internal conductor hostname field when the ``[DEFAULT]rpc_transport``
|
||||||
|
setting is set to "json-rpc". This allows deployments to utilize varying
|
||||||
|
port configurations for JSON-RPC. As a result of this change, the RPC
|
||||||
|
API version has been incremented to ``1.57`` and the feature is not
|
||||||
|
available until any ``[DEFAULT]pin_release_version`` setting is removed.
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
Operators utilizing JSON-RPC transport to conductors with a non-default
|
||||||
|
port configuration should expect to see the hash ring layout change as
|
||||||
|
the port number is now included in the hash ring calculation. This will
|
||||||
|
only occur once the hash ring pin has been removed.
|
||||||
|
- Requires ``ironic-lib`` version *5.5.0* for the json-rpc port to be
|
||||||
|
properly set and utilized.
|
@ -14,7 +14,7 @@ WebOb>=1.7.1 # MIT
|
|||||||
python-cinderclient!=4.0.0,>=3.3.0 # Apache-2.0
|
python-cinderclient!=4.0.0,>=3.3.0 # Apache-2.0
|
||||||
python-glanceclient>=2.8.0 # Apache-2.0
|
python-glanceclient>=2.8.0 # Apache-2.0
|
||||||
keystoneauth1>=4.2.0 # Apache-2.0
|
keystoneauth1>=4.2.0 # Apache-2.0
|
||||||
ironic-lib>=5.4.0 # Apache-2.0
|
ironic-lib>=5.5.0 # Apache-2.0
|
||||||
python-swiftclient>=3.2.0 # Apache-2.0
|
python-swiftclient>=3.2.0 # Apache-2.0
|
||||||
pytz>=2013.6 # MIT
|
pytz>=2013.6 # MIT
|
||||||
stevedore>=1.29.0 # Apache-2.0
|
stevedore>=1.29.0 # Apache-2.0
|
||||||
|
Loading…
Reference in New Issue
Block a user