Merge lp:~james-page/charms/trusty/neutron-agents-midonet/trunk into lp:~celebdor/charms/trusty/neutron-agents-midonet/split

Proposed by James Page
Status: Superseded
Proposed branch: lp:~james-page/charms/trusty/neutron-agents-midonet/trunk
Merge into: lp:~celebdor/charms/trusty/neutron-agents-midonet/split
Diff against target: 553 lines (+159/-179)
7 files modified
hooks/services.py (+9/-3)
tests/006-minimal-trusty-kilo-mem (+29/-0)
tests/010-basic-trusty-juno (+3/-6)
tests/011-basic-trusty-kilo (+3/-6)
tests/012-basic-trusty-liberty (+22/-0)
tests/basic_deployment.py (+71/-100)
unit_tests/test_context.py (+22/-64)
To merge this branch: bzr merge lp:~james-page/charms/trusty/neutron-agents-midonet/trunk
Reviewer Review Type Date Requested Status
Antoni Segura Puimedon Pending
Review via email: mp+286180@code.launchpad.net

This proposal has been superseded by a proposal from 2016-02-16.

To post a comment you must log in.

Unmerged revisions

51. By James Page

Misc updates

50. By James Page

Tweak charm sources

49. By James Page

Fully mock out unit tests from underlying os

48. By Antoni Segura Puimedon <email address hidden>

amulet: remove old tests and add check for nova-api-metadata

47. By Antoni Segura Puimedon <email address hidden>

Fix unit tests

46. By Antoni Segura Puimedon <email address hidden>

linting fix

45. By Antoni Segura Puimedon <email address hidden>

use the right midonet plugin for Liberty and above

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'hooks/services.py'
2--- hooks/services.py 2016-02-04 11:42:36 +0000
3+++ hooks/services.py 2016-02-16 14:28:40 +0000
4@@ -18,9 +18,9 @@
5 from charmhelpers.contrib.openstack import utils
6 from charmhelpers.core import hookenv
7 from charmhelpers.core import host
8-from charmhelpers.core import unitdata
9 from charmhelpers.core.services import base
10 from charmhelpers.core.services import helpers
11+from charmhelpers.core import unitdata
12 from midonet_helpers import puppet
13 from midonet_helpers import relations as common_relations
14 from midonet_helpers import repositories
15@@ -86,6 +86,10 @@
16 amqp = context.AMQPContext()
17 network_service = MidonetNetworkServiceContext(rel_name='neutron_agents')
18 midonet = common_relations.MidonetApiRelation()
19+ if ost_release in ('juno', 'kilo'):
20+ midonet_plugin = 'python-neutron-plugin-midonet'
21+ else:
22+ midonet_plugin = 'python-networking-midonet'
23
24 manager = base.ServiceManager([
25 {
26@@ -102,7 +106,7 @@
27 source='dhcp_agent.ini',
28 target='/etc/neutron/dhcp_agent.ini'),
29 puppet.InstallPackagesCallback(
30- ('python-neutron-plugin-midonet',)),
31+ (midonet_plugin,)),
32 OSTRenderer('/etc/neutron/neutron.conf',
33 [amqp]),
34 ],
35@@ -127,8 +131,10 @@
36 ],
37 },
38 ])
39+
40 manager.manage()
41 if (host.service_running('neutron-dhcp-agent') and
42 host.service_running('neutron-metadata-agent') and
43 host.service_running('nova-api-metadata')):
44- hookenv.status_set('active', 'All nova and neutron agents up and running')
45+ hookenv.status_set('active',
46+ 'All nova and neutron agents up and running')
47
48=== modified file 'tests/00-setup' (properties changed: +x to -x)
49=== added file 'tests/006-minimal-trusty-kilo-mem'
50--- tests/006-minimal-trusty-kilo-mem 1970-01-01 00:00:00 +0000
51+++ tests/006-minimal-trusty-kilo-mem 2016-02-16 14:28:40 +0000
52@@ -0,0 +1,29 @@
53+#!/usr/bin/env python
54+#
55+# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
56+#
57+# Licensed under the Apache License, Version 2.0 (the "License");
58+# you may not use this file except in compliance with the License.
59+# You may obtain a copy of the License at
60+#
61+# http://www.apache.org/licenses/LICENSE-2.0
62+#
63+# Unless required by applicable law or agreed to in writing, software
64+# distributed under the License is distributed on an "AS IS" BASIS,
65+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66+# See the License for the specific language governing permissions and
67+# limitations under the License.
68+import os
69+
70+import basic_deployment
71+
72+if __name__ == '__main__':
73+ if None in (os.getenv('MEM_USERNAME'), os.getenv('MEM_PWD')):
74+ print('Missing MEM_USERNAME and MEM_PWD environment variables for '
75+ 'running Midokura Enterprise MidoNet tests. Skipping test')
76+ else:
77+ deployment = basic_deployment.AgentMinimumDeployment(
78+ ubuntu_series='trusty',
79+ openstack_origin='cloud:trusty-kilo',
80+ midonet_origin='mem-1.9')
81+ deployment.run_tests()
82
83=== modified file 'tests/010-basic-trusty-juno'
84--- tests/010-basic-trusty-juno 2016-01-27 17:01:34 +0000
85+++ tests/010-basic-trusty-juno 2016-02-16 14:28:40 +0000
86@@ -1,4 +1,4 @@
87-#!/usr/bin/python
88+#!/usr/bin/env python
89 #
90 # Copyright (c) 2015 Midokura SARL, All Rights Reserved.
91 #
92@@ -13,13 +13,10 @@
93 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
94 # See the License for the specific language governing permissions and
95 # limitations under the License.
96-
97-
98-from basic_deployment import MidonetBasicDeployment
99+import basic_deployment
100
101 if __name__ == '__main__':
102- deployment = MidonetBasicDeployment(
103+ deployment = basic_deployment.AgentMinimumDeployment(
104 ubuntu_series='trusty',
105 openstack_origin='cloud:trusty-juno',
106 midonet_origin='midonet-2015.06')
107- deployment.run_tests()
108
109=== modified file 'tests/011-basic-trusty-kilo'
110--- tests/011-basic-trusty-kilo 2016-01-27 17:01:34 +0000
111+++ tests/011-basic-trusty-kilo 2016-02-16 14:28:40 +0000
112@@ -1,4 +1,4 @@
113-#!/usr/bin/python
114+#!/usr/bin/env python
115 #
116 # Copyright (c) 2015 Midokura SARL, All Rights Reserved.
117 #
118@@ -13,13 +13,10 @@
119 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120 # See the License for the specific language governing permissions and
121 # limitations under the License.
122-
123-
124-from basic_deployment import MidonetBasicDeployment
125+import basic_deployment
126
127 if __name__ == '__main__':
128- deployment = MidonetBasicDeployment(
129+ deployment = basic_deployment.AgentMinimumDeployment(
130 ubuntu_series='trusty',
131 openstack_origin='cloud:trusty-kilo',
132 midonet_origin='midonet-2015.06')
133- deployment.run_tests()
134
135=== added file 'tests/012-basic-trusty-liberty'
136--- tests/012-basic-trusty-liberty 1970-01-01 00:00:00 +0000
137+++ tests/012-basic-trusty-liberty 2016-02-16 14:28:40 +0000
138@@ -0,0 +1,22 @@
139+#!/usr/bin/env python
140+#
141+# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
142+#
143+# Licensed under the Apache License, Version 2.0 (the "License");
144+# you may not use this file except in compliance with the License.
145+# You may obtain a copy of the License at
146+#
147+# http://www.apache.org/licenses/LICENSE-2.0
148+#
149+# Unless required by applicable law or agreed to in writing, software
150+# distributed under the License is distributed on an "AS IS" BASIS,
151+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
152+# See the License for the specific language governing permissions and
153+# limitations under the License.
154+import basic_deployment
155+
156+if __name__ == '__main__':
157+ deployment = basic_deployment.AgentMinimumDeployment(
158+ ubuntu_series='trusty',
159+ openstack_origin='cloud:trusty-liberty',
160+ midonet_origin='midonet-2015.06')
161
162=== modified file 'tests/basic_deployment.py'
163--- tests/basic_deployment.py 2016-02-04 11:42:36 +0000
164+++ tests/basic_deployment.py 2016-02-16 14:28:40 +0000
165@@ -31,7 +31,7 @@
166 SETUP_TIMEOUT = 9600
167
168
169-class MidonetBasicDeployment():
170+class AgentMinimumDeployment():
171 def __init__(self, ubuntu_series, openstack_origin=None,
172 midonet_origin=None):
173 self.os_release = openstack_origin
174@@ -43,6 +43,16 @@
175 self.d = amulet.Deployment(series=self.series)
176 self.d.charm_name = 'neutron-agents-midonet'
177
178+ # Sentries
179+ self.zookeeper_sentry = None
180+ self.keystone_sentry = None
181+ self.cassandra_sentry = None
182+ self.nova_compute_sentry = None
183+ self.mn_api_sentry = None
184+ self.agents_mn_sentry = None
185+ self.keystone_api_relation = None
186+ self.zookeeper_api_relation = None
187+
188 self._add_services()
189 self._add_relations()
190 self._configure_services()
191@@ -50,37 +60,28 @@
192 self._initialize_tests()
193
194 def _add_services(self):
195- self.d.add('mysql', charm='cs:trusty/mysql', units=1,
196+ self.d.add('mysql', charm='mysql', units=1,
197 series=self.series)
198- self.d.add('rabbitmq-server', charm='cs:trusty/rabbitmq-server',
199+ self.d.add('keystone', charm='keystone', units=1, series=self.series)
200+ self.d.add('cassandra', charm='cassandra',
201 units=1, series=self.series)
202- self.d.add('cassandra', charm='cassandra', units=1,
203- branch='cs:trusty/cassandra', series=self.series)
204- self.d.add('keystone', charm='keystone', units=1, series=self.series,
205- branch='cs:trusty/keystone')
206- self.d.add('compute', charm='nova-compute', units=1,
207- branch='cs:trusty/nova-compute', series=self.series,
208- constraints={'mem': '8G'})
209- self.d.add('neutron', charm='neutron-api', units=1,
210- branch='lp:~celebdor/charms/trusty/neutron-api/liberty',
211- series=self.series)
212- self.d.add('nova', charm='nova-cloud-controller',
213- units=1, series=self.series)
214- self.d.add('glance', charm='glance',
215- branch='cs:trusty/glance',
216- units=1, series=self.series)
217- self.d.add('cinder', charm='cinder',
218- branch='cs:trusty/glance',
219- units=1, series=self.series)
220- self.d.add('zookeeper', charm='cs:trusty/zookeeper', units=1,
221- series=self.series)
222- self.d.add('midonet-api', charm='midonet-api', units=1,
223+ self.d.add('zookeeper', charm='zookeeper', units=1,
224+ series=self.series)
225+ self.d.add('rabbitmq', charm='rabbitmq-server', units=1,
226+ series=self.series)
227+ self.d.add('nova', charm='nova-cloud-controller', units=1,
228+ series=self.series)
229+ self.d.add('neutron',
230+ charm='cs:~openstack-charmers-next/trusty/neutron-api',
231+ units=1,
232+ series=self.series)
233+ self.d.add('midonet-api', charm='midonet-api',
234 branch='lp:~celebdor/charms/trusty/midonet-api/trunk',
235 series=self.series)
236- self.d.add('midonet-agent', charm='midonet-agent', units=1,
237+ self.d.add('midonet-agent', charm='midonet-agent',
238 branch='lp:~celebdor/charms/trusty/midonet-agent/trunk',
239 series=self.series)
240- self.d.add('neutron-agents-midonet', constraints={'mem': '4G'})
241+ self.d.add('neutron-agents-midonet', constraints={'mem': "4G"})
242
243 def _add_relations(self):
244 # Keystone
245@@ -89,65 +90,53 @@
246 # Nova
247 self.d.relate('mysql:shared-db', 'nova:shared-db')
248 self.d.relate('keystone:identity-service', 'nova:identity-service')
249- self.d.relate('rabbitmq-server:amqp', 'nova:amqp')
250+ self.d.relate('rabbitmq:amqp', 'nova:amqp')
251 self.d.relate('neutron-agents-midonet:neutron_agents',
252 'nova:quantum-network-service')
253 self.d.relate('neutron:neutron-api', 'nova:neutron-api')
254- self.d.relate('compute:cloud-compute', 'nova:cloud-compute')
255- self.d.relate('glance:image-service', 'nova:image-service')
256- self.d.relate('cinder:cinder-volume-service',
257- 'nova:cinder-volume-service')
258-
259- # Cinder
260- self.d.relate('keystone:identity-service', 'cinder:identity-service')
261- self.d.relate('mysql:shared-db', 'cinder:shared-db')
262- self.d.relate('rabbitmq-server:amqp', 'cinder:amqp')
263- self.d.relate('glance:image-service', 'cinder:image-service')
264-
265- # Glance
266- self.d.relate('keystone:identity-service', 'glance:identity-service')
267- self.d.relate('mysql:shared-db', 'glance:shared-db')
268- self.d.relate('rabbitmq-server:amqp', 'glance:amqp')
269
270 # Neutron
271 self.d.relate('mysql:shared-db', 'neutron:shared-db')
272 self.d.relate('keystone:identity-service', 'neutron:identity-service')
273- self.d.relate('rabbitmq-server:amqp', 'neutron:amqp')
274+ self.d.relate('rabbitmq:amqp', 'neutron:amqp')
275 self.d.relate('neutron-agents-midonet:neutron-plugin-api',
276 'neutron:neutron-plugin-api')
277+ self.d.relate('midonet-api:midonet-api', 'neutron:midonet')
278
279 # MidoNet
280 self.d.relate('keystone:identity-service', 'midonet-api:keystone')
281 self.d.relate('zookeeper:zookeeper', 'midonet-api:zookeeper')
282 self.d.relate('midonet-agent:host', 'midonet-api:host')
283- self.d.relate('neutron:midonet', 'midonet-api:midonet-api')
284- self.d.relate('rabbitmq-server:amqp', 'neutron-gents-midonet:amqp')
285+ self.d.relate('rabbitmq:amqp', 'neutron-agents-midonet:amqp')
286 self.d.relate('midonet-agent:host', 'neutron-agents-midonet:agent')
287+ self.d.relate('midonet-api:midonet-api',
288+ 'neutron-agents-midonet:midonet')
289 self.d.relate('cassandra:database', 'midonet-agent:cassandra')
290 self.d.relate('zookeeper:zookeeper', 'midonet-agent:zookeeper')
291- self.d.relate('midonet-api:midonet-api',
292- 'neutron-agents-midonet:midonet')
293-
294- # Compute
295- self.d.relate('rabbitmq-server:amqp', 'compute:amqp')
296- self.d.relate('midonet-agent:neutron-plugin', 'compute:neutron-plugin')
297- self.d.relate('glance:image-service', 'compute:image-service')
298
299 def _configure_services(self):
300- repo_config = {'midonet-origin': self.midonet_origin,
301- 'openstack-origin': self.os_release}
302- if self.mem:
303- repo_config.update(self.mem_credentials)
304-
305 self.d.configure('keystone', {
306- 'admin-user': 'admin',
307- 'admin-password': 'openstack',
308- 'admin-token': 'osttesting',
309- 'enable-pki': 'false',
310- 'openstack-origin': self.os_release})
311-
312- self.d.configure('mysql', {
313- 'max-connections': 500})
314+ 'admin-user': 'admin',
315+ 'admin-password': 'openstack',
316+ 'admin-token': 'osttesting',
317+ 'enable-pki': 'false',
318+ 'openstack-origin': self.os_release})
319+
320+ self.d.configure('nova', {
321+ 'network-manager': 'Neutron',
322+ 'openstack-origin': self.os_release})
323+
324+ neutron_conf = {
325+ 'l2-population': 'false',
326+ 'neutron-security-groups': 'true',
327+ 'neutron-plugin': 'midonet',
328+ 'neutron-external-network': 'Public_Network',
329+ 'midonet-origin': self.midonet_origin,
330+ 'openstack-origin': self.os_release}
331+ if self.mem:
332+ neutron_conf.update(self.mem_credentials)
333+
334+ self.d.configure('neutron', neutron_conf)
335
336 self.d.configure('cassandra', {
337 'authenticator': 'AllowAllAuthenticator',
338@@ -157,33 +146,16 @@
339 'deb http://debian.datastax.com/community 2.0 main',
340 'extra_packages': 'dsc20'})
341
342- self.d.configure('compute', {
343- 'openstack-origin': self.os_release,
344- 'virt-type': 'qemu',
345- 'flat-interface': 'eth0',
346- 'manage-neutron-plugin-legacy-mode': 'false'})
347-
348- self.d.configure('nova', {
349- 'openstack-origin': self.os_release,
350- 'network-manager': 'Neutron',
351- 'shared-secret': 'secret'})
352-
353- self.d.configure('neutron', {
354- 'neutron-plugin': 'midonet',
355- 'neutron-security-groups': 'True',
356- 'neutron-external-network': 'Public_Network',
357- 'l2-population': 'False',
358- 'openstack-origin': self.os_release,
359- 'midonet-origin': self.midonet_origin})
360-
361-
362- self.d.configure('midonet-api', repo_config)
363-
364- neutron_agts_midonet_config = {'shared-secret': 'secret'}
365- neutron_agts_midonet_config.update(repo_config)
366- self.d.configure('neutron-agents-midonet', neutron_agts_midonet_config)
367-
368- self.d.configure('midonet-agent', repo_config)
369+ self.d.configure('mysql', {'max-connections': 500})
370+
371+ api_config = {'midonet-origin': self.midonet_origin,
372+ 'openstack-origin': self.os_release}
373+ if self.mem:
374+ api_config.update(self.mem_credentials)
375+ self.d.configure('midonet-api', api_config)
376+ self.d.configure('midonet-agent', api_config)
377+ self.d.configure('neutron-agents-midonet', api_config)
378+
379
380 def _deploy(self):
381 try:
382@@ -196,8 +168,6 @@
383 def _initialize_tests(self):
384 self.zookeeper_sentry = self.d.sentry.unit['zookeeper/0']
385 self.keystone_sentry = self.d.sentry.unit['keystone/0']
386- self.cassandra_sentry = self.d.sentry.unit['cassandra/0']
387- self.nova_compute_sentry = self.d.sentry.unit['compute/0']
388 self.mn_api_sentry = self.d.sentry.unit['midonet-api/0']
389 self.mn_agent_sentry = self.d.sentry.unit['midonet-agent/0']
390 self.agents_mn_sentry = self.d.sentry.unit['neutron-agents-midonet/0']
391@@ -206,12 +176,6 @@
392 'identity-service', 'midonet-api:keystone')
393 self.zookeeper_api_relation = self.zookeeper_sentry.relation(
394 'zookeeper', 'midonet-api:zookeeper')
395- self.zk_host_relation = self.zookeeper_sentry.relation(
396- 'zookeeper', 'midonet-agent:zookeeper')
397- self.cs_host_relation = self.cassandra_sentry.relation(
398- 'database', 'midonet-agent:cassandra')
399- self.api_host_relation = self.mn_api_sentry.relation(
400- 'host', 'midonet-agent:host')
401
402 def run_tests(self):
403 for test in dir(self):
404@@ -249,3 +213,10 @@
405 amulet.raise_status(amulet.FAIL,
406 msg="neutron-metadata-agent not running: %s" %
407 meta_agent_out)
408+ u.log.debug('Checking nova-api-metadata...')
409+ meta_agent_out, _ = self.agents_mn_sentry.run(
410+ 'service nova-api-metadata status')
411+ if 'running' not in meta_agent_out:
412+ amulet.raise_status(amulet.FAIL,
413+ msg="nova-api-metadata not running: %s" %
414+ meta_agent_out)
415
416=== modified file 'unit_tests/test_context.py'
417--- unit_tests/test_context.py 2016-01-28 00:53:03 +0000
418+++ unit_tests/test_context.py 2016-02-16 14:28:40 +0000
419@@ -18,7 +18,7 @@
420 import shutil
421 import tempfile
422
423-import mock
424+import services
425
426 from .midonet_helpers import test
427
428@@ -55,38 +55,20 @@
429 '10.10.10.11']
430 test.CharmTestCase.__init__(self, *args, **kwargs)
431
432- @mock.patch('charmhelpers.fetch.apt_install')
433- def setUp(self, apt_install):
434-
435- import services
436-
437+ def setUp(self):
438 self.relations = test.FakeRelation(self._full_relation_data())
439- self.services = services
440 test.CharmTestCase.setUp(self, services.hookenv, HOOKENV_PATCHES)
441
442 def lsb_release():
443- ubuntu_trusty = {
444+ return {
445 'DISTRIB_ID': 'Ubuntu',
446 'DISTRIB_RELEASE': '14.04',
447 'DISTRIB_CODENAME': 'trusty',
448 'DISTRIB_DESCRIPTION': "Ubuntu 14.04.3 LTS",
449 }
450
451- try:
452- data = services.host.lsb_release()
453- except Exception:
454- return ubuntu_trusty
455- if data.get('DISTRIB_ID') != 'Ubuntu':
456- return ubuntu_trusty
457- return data
458-
459 def get_os_codename_package(pkg, fatal=True):
460- version = 'liberty'
461- try:
462- ret_vers = services.utils.get_os_codename_package(pkg, fatal)
463- except Exception:
464- return version
465- return ret_vers
466+ return 'liberty'
467
468 self.patch_all(services.utils,
469 ('get_os_codename_package',
470@@ -94,38 +76,21 @@
471 self.lsb_release.side_effect = lsb_release
472 self.get_os_codename_package.side_effect = get_os_codename_package
473
474+ self.patch_all(services.base, ('service_restart', 'service_stop'))
475+ self.patch_all(services.helpers, ('render_template',))
476 self.patch_all(services.host, ('service_running',))
477- self.service_running.return_value = True
478-
479- _templating = mock.patch.object(services.helpers, 'render_template')
480- setattr(self, 'render_template', _templating.start())
481- self.addCleanup(_templating.stop)
482-
483- _check_call = mock.patch.object(services.hookenv.subprocess,
484- 'check_call')
485- setattr(self, 'check_call', _check_call.start())
486- self.addCleanup(_check_call.stop)
487-
488- _service_restart = mock.patch.object(services.base, 'service_restart')
489- setattr(self, 'service_restart', _service_restart.start())
490- self.addCleanup(_service_restart.stop)
491-
492- _service_stop = mock.patch.object(services.base, 'service_stop')
493- setattr(self, 'service_stop', _service_stop.start())
494- self.addCleanup(_service_stop.stop)
495-
496- _relation_helpers = mock.patch.object(
497- services.relations.helpers, 'hookenv', spec=[
498- 'relation_ids',
499- 'related_units',
500- 'relation_get'])
501- setattr(self, 'relation_helpers', _relation_helpers.start())
502- self.addCleanup(_relation_helpers.stop)
503+ self.patch_all(services.puppet, ('_apply',))
504+ self.patch_all(services.templating.OSConfigRenderer, ('write_all',))
505
506 self.test_config.config['openstack-origin'] = 'cloud:trusty-liberty'
507 self.config.side_effect = self.test_config.get
508- self.relation_get.side_effect = self.test_relation.get
509+ self.related_units.side_effect = self.relations.related_units
510+ self.relation_get.side_effect = self.relations.get
511+ self.relation_ids.side_effect = self.relations.relation_ids
512
513+ services.context.related_units = self.related_units
514+ services.context.relation_get = self.relation_get
515+ services.context.relation_ids = self.relation_ids
516 services.context.config = self.config
517
518 self.charm_dir.return_value = tempfile.mkdtemp()
519@@ -135,21 +100,7 @@
520 test.CharmTestCase.tearDown(self)
521
522 def test_config_change(self):
523-
524- self.data = self._full_relation_data()
525-
526- self.relation_helpers.relation_ids.side_effect = (
527- self.relations.relation_ids)
528-
529- import services
530- services.context.relation_ids = self.relation_helpers.relation_ids
531-
532- self.relation_helpers.related_units.side_effect = (
533- self.relations.related_units)
534- self.relation_helpers.relation_get.side_effect = (
535- self.relations.get)
536-
537- self.services.manage()
538+ services.manage()
539
540 self.assertTrue(self.render_template.called)
541 self.assertTrue(self.service_restart.called)
542@@ -181,4 +132,11 @@
543 'port': 8080,
544 },
545 },
546+ 'amqp:2': {
547+ 'rabbitmq/0': {
548+ 'clustered': False,
549+ 'private-address': '10.0.30.14',
550+ 'password': 'foopass',
551+ },
552+ },
553 }

Subscribers

People subscribed via source and target branches