aboutsummaryrefslogtreecommitdiff
path: root/kolla_ansible
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 /kolla_ansible
parent318e739f12ec09b05eac6dfa46ac3f828155fbde (diff)
parent159925248375727ae67ef93a606b09a54e83ba2d (diff)
downloadkolla-ansible-60f8b7410dd6e44ae2b06a6e321685a0af3ef00c.tar.gz
kolla-ansible-60f8b7410dd6e44ae2b06a6e321685a0af3ef00c.zip
Merge "re-add rabbitmq config for clustering interface"
Diffstat (limited to 'kolla_ansible')
-rw-r--r--kolla_ansible/put_address_in_context.py21
-rw-r--r--kolla_ansible/tests/unit/test_address_filters.py9
2 files changed, 27 insertions, 3 deletions
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')