diff options
| author | Zuul <zuul@review.opendev.org> | 2022-03-25 09:52:10 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2022-03-25 09:52:10 +0000 |
| commit | 60f8b7410dd6e44ae2b06a6e321685a0af3ef00c (patch) | |
| tree | 2426ba3c0056e07b35d9d8d74dbc64f7107852a6 /kolla_ansible | |
| parent | 318e739f12ec09b05eac6dfa46ac3f828155fbde (diff) | |
| parent | 159925248375727ae67ef93a606b09a54e83ba2d (diff) | |
| download | kolla-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.py | 21 | ||||
| -rw-r--r-- | kolla_ansible/tests/unit/test_address_filters.py | 9 |
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') |
