re-add rabbitmq config for clustering interface

this adds back the ability to configure
the rabbitmq/erlang kernel network interface
which was removed in https://review.opendev.org/#/c/584427/
seemingly by accident.

Closes-Bug: 1900160

Change-Id: I6f00396495853e117429c17fadfafe809e322a31
This commit is contained in:
Sven Kieske 2020-10-16 16:24:02 +02:00
parent b668e27356
commit 1599252483
No known key found for this signature in database
GPG Key ID: C6F2F5330301B411
6 changed files with 64 additions and 3 deletions

View File

@ -79,6 +79,24 @@
notify: notify:
- Restart rabbitmq container - Restart rabbitmq container
- name: Copying over advanced.config
become: true
vars:
service: "{{ rabbitmq_services['rabbitmq'] }}"
template:
src: "{{ item }}"
dest: "{{ node_config_directory }}/{{ project_name }}/advanced.config"
mode: "0660"
with_first_found:
- "{{ node_custom_config }}/rabbitmq/{{ inventory_hostname }}/advanced.config"
- "{{ node_custom_config }}/rabbitmq/advanced.config"
- "advanced.config.j2"
when:
- inventory_hostname in groups[service.group]
- service.enabled | bool
notify:
- Restart rabbitmq container
- name: Copying over definitions.json - name: Copying over definitions.json
become: true become: true
vars: vars:

View File

@ -0,0 +1,7 @@
[
{kernel, [
{inet_dist_use_interface, {% raw %}{{% endraw %}{{ api_interface_address | put_address_in_context('rabbitmq') }}}},
{inet_dist_listen_min, {{ role_rabbitmq_cluster_port }}},
{inet_dist_listen_max, {{ role_rabbitmq_cluster_port }}}
]}
].

View File

@ -19,6 +19,12 @@
"owner": "rabbitmq", "owner": "rabbitmq",
"perm": "0600" "perm": "0600"
}, },
{
"source": "{{ container_config_directory }}/advanced.config",
"dest": "/etc/rabbitmq/advanced.config",
"owner": "rabbitmq",
"perm": "0600"
},
{ {
"source": "{{ container_config_directory }}/definitions.json", "source": "{{ container_config_directory }}/definitions.json",
"dest": "/etc/rabbitmq/definitions.json", "dest": "/etc/rabbitmq/definitions.json",

View File

@ -14,6 +14,7 @@
# 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 ipaddress import ip_address
from kolla_ansible.exception import FilterError from kolla_ansible.exception import FilterError
@ -27,18 +28,32 @@ def put_address_in_context(address, context):
:returns: string with address in proper context :returns: string with address in proper context
""" """
if context not in ['url', 'memcache']: if context not in ['url', 'memcache', 'rabbitmq']:
raise FilterError("Unknown context '{context}'" raise FilterError("Unknown context '{context}'"
.format(context=context)) .format(context=context))
if ':' not in address: if ':' not in address and context != 'rabbitmq':
return address return address
# must be IPv6 raw address # must be IPv6 raw address
if context == 'url': if context == 'url':
return '[{address}]'.format(address=address) return '[{address}]'.format(address=address)
elif context == 'memcache': if context == 'memcache':
return 'inet6:[{address}]'.format(address=address) return 'inet6:[{address}]'.format(address=address)
# rabbitmq/erlang has special syntax for ip addresses in IPv4 and IPv6
# see: https://www.erlang.org/doc/man/inet.html
# replacing dots and colons with decimal points
# and converting IPv6 as described here:
# https://www.erlang.org/doc/man/inet.html#type-ip6_address
if context == 'rabbitmq':
if ip_address(address).version == 6:
return (",".join(['16#%x' % int(x, 16)
for x in
ip_address(address).exploded.split(':')]))
return address.replace('.', ',')
return address return address

View File

@ -51,6 +51,15 @@ class TestAddressContextFilter(unittest.TestCase):
self.assertEqual(put_address_in_context(addr, context), self.assertEqual(put_address_in_context(addr, context),
'inet6:[{}]'.format(addr)) 'inet6:[{}]'.format(addr))
def test_rabbitmq_context(self):
context = 'rabbitmq'
addr = '192.168.1.1'
self.assertEqual(put_address_in_context(addr, context),
'192,168,1,1')
addr = 'fd::'
self.assertEqual(put_address_in_context(addr, context),
'16#fd,16#0,16#0,16#0,16#0,16#0,16#0,16#0')
def test_unknown_context(self): def test_unknown_context(self):
self.assertRaises(FilterError, put_address_in_context, '', 'lol') self.assertRaises(FilterError, put_address_in_context, '', 'lol')

View File

@ -0,0 +1,6 @@
---
fixes:
- |
adds back the option to configure the rabbitmq
clustering interface via kolla
`LP#1900160 <https://bugs.launchpad.net/kolla-ansible/+bug/1900160>`