Add transport_url property to AMQP adapter

To support oslo.messaging switch to use of transport_url, provide
a formatted transport_url attribute on the AMQP relation adapter.

Change-Id: I02513dbef01f7fde7db65702d2ad64d2aa72ed0f
Closes-Bug: 1817672
This commit is contained in:
James Page 2019-02-26 10:27:52 +01:00
parent 341b879cc1
commit 93f4831605
2 changed files with 27 additions and 1 deletions

View File

@ -206,6 +206,23 @@ class RabbitMQRelationAdapter(OpenStackRelationAdapter):
return '/var/lib/charm/{}/rabbit-client-ca.pem'.format(
hookenv.service_name())
@property
def transport_url(self):
"""
oslo.messaging formatted transport URL
:returns: oslo.messaging formatted transport URL
:rtype: string
"""
hosts = self.relation.rabbitmq_hosts()
transport_url_hosts = ','.join([
"{}:{}@{}:5672".format(self.username,
self.password,
ch_ip.format_ipv6_addr(host_) or host_)
for host_ in hosts
])
return "rabbit://{}/{}".format(transport_url_hosts, self.vhost)
class PeerHARelationAdapter(OpenStackRelationAdapter):
"""

View File

@ -124,7 +124,7 @@ class TestMemcacheRelationAdapter(unittest.TestCase):
class FakeRabbitMQRelation():
auto_accessors = ['vip', 'private_address']
auto_accessors = ['vip', 'private_address', 'password']
relation_name = 'amqp'
def __init__(self, vip=None):
@ -145,11 +145,15 @@ class FakeRabbitMQRelation():
def username(self):
return 'fakename'
def password(self):
return 'password'
class TestRabbitMQRelationAdapter(unittest.TestCase):
def test_class(self):
fake = FakeRabbitMQRelation(None)
adapters.ch_ip.format_ipv6_addr.side_effect = lambda x: x
mq = adapters.RabbitMQRelationAdapter(fake)
self.assertEqual(mq.vhost, 'vhost')
self.assertEqual(mq.username, 'fakename')
@ -158,6 +162,11 @@ class TestRabbitMQRelationAdapter(unittest.TestCase):
# fake._vip = 'vip1'
# self.assertEqual(mq.host, 'vip1')
self.assertEqual(mq.hosts, 'host1,host2')
self.assertEqual(
mq.transport_url,
'rabbit://fakename:password@host1:5672,'
'fakename:password@host2:5672/vhost'
)
class FakeAPIConfigAdapter():