aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-03-25 09:52:10 +0000
committerGerrit Code Review <review@openstack.org>2022-03-25 09:52:10 +0000
commit60f8b7410dd6e44ae2b06a6e321685a0af3ef00c (patch)
tree2426ba3c0056e07b35d9d8d74dbc64f7107852a6
parent318e739f12ec09b05eac6dfa46ac3f828155fbde (diff)
parent159925248375727ae67ef93a606b09a54e83ba2d (diff)
downloadkolla-ansible-60f8b7410dd6e44ae2b06a6e321685a0af3ef00c.tar.gz
kolla-ansible-60f8b7410dd6e44ae2b06a6e321685a0af3ef00c.zip
Merge "re-add rabbitmq config for clustering interface"
-rw-r--r--ansible/roles/rabbitmq/tasks/config.yml18
-rw-r--r--ansible/roles/rabbitmq/templates/advanced.config.j27
-rw-r--r--ansible/roles/rabbitmq/templates/rabbitmq.json.j26
-rw-r--r--kolla_ansible/put_address_in_context.py21
-rw-r--r--kolla_ansible/tests/unit/test_address_filters.py9
-rw-r--r--releasenotes/notes/fix-rabbitmq-interface-configuration-b39c954fb8763d9c.yaml6
6 files changed, 64 insertions, 3 deletions
diff --git a/ansible/roles/rabbitmq/tasks/config.yml b/ansible/roles/rabbitmq/tasks/config.yml
index fd7fd707e..b8fed458c 100644
--- a/ansible/roles/rabbitmq/tasks/config.yml
+++ b/ansible/roles/rabbitmq/tasks/config.yml
@@ -79,6 +79,24 @@
notify:
- 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
become: true
vars:
diff --git a/ansible/roles/rabbitmq/templates/advanced.config.j2 b/ansible/roles/rabbitmq/templates/advanced.config.j2
new file mode 100644
index 000000000..d83b6742a
--- /dev/null
+++ b/ansible/roles/rabbitmq/templates/advanced.config.j2
@@ -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 }}}
+ ]}
+].
diff --git a/ansible/roles/rabbitmq/templates/rabbitmq.json.j2 b/ansible/roles/rabbitmq/templates/rabbitmq.json.j2
index 8f72100bd..150b1355d 100644
--- a/ansible/roles/rabbitmq/templates/rabbitmq.json.j2
+++ b/ansible/roles/rabbitmq/templates/rabbitmq.json.j2
@@ -20,6 +20,12 @@
"perm": "0600"
},
{
+ "source": "{{ container_config_directory }}/advanced.config",
+ "dest": "/etc/rabbitmq/advanced.config",
+ "owner": "rabbitmq",
+ "perm": "0600"
+ },
+ {
"source": "{{ container_config_directory }}/definitions.json",
"dest": "/etc/rabbitmq/definitions.json",
"owner": "rabbitmq",
diff --git a/kolla_ansible/put_address_in_context.py b/kolla_ansible/put_address_in_context.py
index d176a5611..69355283f 100644
--- a/kolla_ansible/put_address_in_context.py
+++ b/kolla_ansible/put_address_in_context.py
@@ -14,6 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+from ipaddress import ip_address
from kolla_ansible.exception import FilterError
@@ -27,18 +28,32 @@ def put_address_in_context(address, 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}'"
.format(context=context))
- if ':' not in address:
+ if ':' not in address and context != 'rabbitmq':
return address
# must be IPv6 raw address
if context == 'url':
return '[{address}]'.format(address=address)
- elif context == 'memcache':
+ if context == 'memcache':
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
diff --git a/kolla_ansible/tests/unit/test_address_filters.py b/kolla_ansible/tests/unit/test_address_filters.py
index 338afb130..be2cee78d 100644
--- a/kolla_ansible/tests/unit/test_address_filters.py
+++ b/kolla_ansible/tests/unit/test_address_filters.py
@@ -51,6 +51,15 @@ class TestAddressContextFilter(unittest.TestCase):
self.assertEqual(put_address_in_context(addr, context),
'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):
self.assertRaises(FilterError, put_address_in_context, '', 'lol')
diff --git a/releasenotes/notes/fix-rabbitmq-interface-configuration-b39c954fb8763d9c.yaml b/releasenotes/notes/fix-rabbitmq-interface-configuration-b39c954fb8763d9c.yaml
new file mode 100644
index 000000000..3dab5c6de
--- /dev/null
+++ b/releasenotes/notes/fix-rabbitmq-interface-configuration-b39c954fb8763d9c.yaml
@@ -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>`