diff --git a/charms_openstack/adapters.py b/charms_openstack/adapters.py index 61e3cf3..5167bcd 100644 --- a/charms_openstack/adapters.py +++ b/charms_openstack/adapters.py @@ -145,6 +145,22 @@ class OpenStackRelationAdapter(object): self.relation, name)()))(meth_name)) +class MemcacheRelationAdapter(OpenStackRelationAdapter): + + """ + Adapter for the MemcacheRequires relation interface. + """ + + interface_type = 'memcache' + + @property + def url(self): + hosts = sorted(self.relation.memcache_hosts()) + if hosts: + return "memcached://{}:11211?timeout=5".format(hosts[0]) + return None + + class RabbitMQRelationAdapter(OpenStackRelationAdapter): """ Adapter for the RabbitMQRequires relation interface. @@ -1096,6 +1112,7 @@ class OpenStackAPIRelationAdapters(OpenStackRelationAdapters): 'amqp': RabbitMQRelationAdapter, 'shared_db': DatabaseRelationAdapter, 'cluster': PeerHARelationAdapter, + 'coordinator_memcached': MemcacheRelationAdapter, } def __init__(self, relations, options=None, options_instance=None, diff --git a/unit_tests/test_charms_openstack_adapters.py b/unit_tests/test_charms_openstack_adapters.py index be45979..ac2c72f 100644 --- a/unit_tests/test_charms_openstack_adapters.py +++ b/unit_tests/test_charms_openstack_adapters.py @@ -102,6 +102,26 @@ class TestOpenStackRelationAdapter(unittest.TestCase): self.assertEqual(i.b, 4) +class FakeMemcacheRelation(): + + auto_accessors = ['private_address'] + relation_name = 'memcache' + + def private_address(self): + return 'private-address' + + def memcache_hosts(self): + return ['host1', 'host2'] + + +class TestMemcacheRelationAdapter(unittest.TestCase): + + def test_class(self): + fake = FakeMemcacheRelation() + memcache = adapters.MemcacheRelationAdapter(fake) + self.assertEqual(memcache.url, 'memcached://host1:11211?timeout=5') + + class FakeRabbitMQRelation(): auto_accessors = ['vip', 'private_address']