Merge ~gnuoy/charms/+source/interface-rabbitmq:master into ~openstack-charmers-layers/charms/+source/interface-rabbitmq:master

Proposed by Liam Young on 2015-12-03
Status: Merged
Merged at revision: 1e96f98fce737caea73e76b9ac57de1f74b5eccc
Proposed branch: ~gnuoy/charms/+source/interface-rabbitmq:master
Merge into: ~openstack-charmers-layers/charms/+source/interface-rabbitmq:master
Diff against target: 100 lines (+46/-11)
1 file modified
requires.py (+46/-11)
Reviewer Review Type Date Requested Status
James Page 2015-12-03 Needs Fixing on 2015-12-03
Review via email: mp+279417@code.launchpad.net
To post a comment you must log in.
James Page (james-page) :
review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/requires.py b/requires.py
2index b118668..0a4a9d2 100644
3--- a/requires.py
4+++ b/requires.py
5@@ -14,14 +14,15 @@
6 from charms.reactive import RelationBase
7 from charms.reactive import hook
8 from charms.reactive import scopes
9-
10+from charmhelpers.core import hookenv
11
12 class RabbitMQRequires(RelationBase):
13 scope = scopes.GLOBAL
14
15 # These remote data fields will be automatically mapped to accessors
16 # with a basic documentation string provided.
17- auto_accessors = ['hostname', 'password']
18+ auto_accessors = ['password', 'private-address', 'ssl_port',
19+ 'ssl_ca', 'ha_queues', 'ha-vip-only', 'clustered', 'vip']
20
21 def vhost(self):
22 return self.get_local('vhost')
23@@ -35,22 +36,23 @@ class RabbitMQRequires(RelationBase):
24
25 @hook('{requires:rabbitmq}-relation-changed')
26 def changed(self):
27- self.set_state('{relation_name}.connected')
28- if self.data_complete():
29+ if self.base_data_complete():
30 self.set_state('{relation_name}.available')
31+ if self.ssl_data_complete():
32+ self.set_state('{relation_name}.available.ssl')
33
34 @hook('{requires:rabbitmq}-relation-{broken,departed}')
35- def departed_or_broken(self):
36+ def departed(self):
37 self.remove_state('{relation_name}.connected')
38- if not self.data_complete():
39- self.remove_state('{relation_name}.available')
40+ self.remove_state('{relation_name}.available')
41+ self.remove_state('{relation_name}.available.ssl')
42
43- def data_complete(self):
44+ def base_data_complete(self):
45 """
46 Get the connection string, if available, or None.
47 """
48 data = {
49- 'host': self.hostname(),
50+ 'hostname': self.private_address(),
51 'vhost': self.vhost(),
52 'username': self.username(),
53 'password': self.password(),
54@@ -59,11 +61,44 @@ class RabbitMQRequires(RelationBase):
55 return True
56 return False
57
58+ def ssl_data_complete(self):
59+ """
60+ Get the connection string, if available, or None.
61+ """
62+ data = {
63+ 'ssl_port': self.ssl_port(),
64+ 'ssl_ca': self.ssl_ca(),
65+ }
66+ if all(data.values()):
67+ return True
68+ return False
69+
70+
71 def configure(self, username, vhost):
72+ """
73+ Called by charm layer that uses this interface to configure rabbit.
74+ """
75 relation_info = {
76 'username': username,
77 'vhost': vhost,
78 }
79- self.set_local('username', username)
80- self.set_local('vhost', vhost)
81+ self.set_local(**relation_info)
82 self.set_remote(**relation_info)
83+
84+
85+ def get_remote_all(self, key, default=None):
86+ '''Return a list of all values presented by remote units for key'''
87+ values = []
88+ for conversation in self.conversations():
89+ for relation_id in conversation.relation_ids:
90+ for unit in hookenv.related_units(relation_id):
91+ value = hookenv.relation_get(key,
92+ unit,
93+ relation_id) or default
94+ if value:
95+ values.append(value)
96+ return list(set(values))
97+
98+
99+ def rabbitmq_hosts(self):
100+ return self.get_remote_all('private-address')

Subscribers

People subscribed via source and target branches