summaryrefslogtreecommitdiffstats
path: root/manifests/profile/base
diff options
context:
space:
mode:
authorJohn Eckersberg <jeckersb@redhat.com>2017-03-21 10:05:17 -0400
committerAndrew Smith <ansmith@redhat.com>2017-07-16 19:57:04 -0400
commit547afe7df02011e5ea650eaffdad3858cf3fc21d (patch)
treeb586ef51a107af9cd1df781b293182427348f3ed /manifests/profile/base
parent65fe0404ae77364480a545141486d4d606d8119b (diff)
Create a Mesh of qdrouterd links for messaging high availability
For multi-node deployments of the dispatch router, a mesh of inter-router links is created. Note that bi-directional links must not be configured. Example: For nodes A, B, C Node Inter-Router Link A: [] B: [A] C: [A,B] Change-Id: If43beea7a53c1f8f1dff062341c7ea81751c3122
Diffstat (limited to 'manifests/profile/base')
-rw-r--r--manifests/profile/base/qdr.pp72
1 files changed, 67 insertions, 5 deletions
diff --git a/manifests/profile/base/qdr.pp b/manifests/profile/base/qdr.pp
index 37cf9e5..577f3d5 100644
--- a/manifests/profile/base/qdr.pp
+++ b/manifests/profile/base/qdr.pp
@@ -19,18 +19,22 @@
# === Parameters
#
# [*qdr_username*]
-# Username for the qrouter daemon
+# Username for the qdrouter daemon
# Defaults to undef
#
# [*qdr_password*]
-# Password for the qrouter daemon
+# Password for the qdrouter daemon
# Defaults to undef
#
# [*qdr_listener_port*]
-# Port for the listener (not that we do not use qdr::listener_port
+# Port for the listener (note that we do not use qdr::listener_port
# directly because it requires a string and we have a number.
# Defaults to hiera('tripleo::profile::base::qdr::qdr_listener_port', 5672)
#
+# [*qdr_node_names*]
+# Set of nodes for qdr mesh deployment setup
+# Defaults to hiera('rabbitmq_node_names')
+#
# [*step*]
# (Optional) The current step in deployment. See tripleo-heat-templates
# for more details.
@@ -41,11 +45,69 @@ class tripleo::profile::base::qdr (
$qdr_password = undef,
$qdr_listener_port = hiera('tripleo::profile::base::qdr::qdr_listener_port', 5672),
$step = Integer(hiera('step')),
+ $qdr_node_names = pick(hiera('qdr_node_names',undef),hiera('rabbitmq_node_names')),
) {
if $step >= 1 {
+ # For multi-node deployments of the dispatch router, a mesh of
+ # inter-router links is created. Bi-directional links must
+ # not be configured.
+ #
+ # Example: For nodes A, B, C
+ # Node Inter-Router Link
+ # A: []
+ # B: [A]
+ # C: [A,B]
+ #
+ # NB: puppet 4.8 introduces break(), which would be favord to
+ # the following
+ $connectors = $qdr_node_names.reduce([]) |$memo, $node| {
+ if $::hostname in $node {
+ $memo + true
+ } else {
+ if true in $memo {
+ $memo
+ } else {
+ $memo + [{'host' => $node,
+ 'role' => 'inter-router',
+ 'port' => '25672'}]
+ }
+ }
+ } - true
+
+ $router_mode = size($qdr_node_names) ? {
+ 1 => 'standalone',
+ default => 'interior',
+ }
+
+ $extra_listeners = size($qdr_node_names) ? {
+ 1 => [],
+ default => [{'host' => '0.0.0.0',
+ 'port' => '25672',
+ 'role' => 'inter-router'}],
+ }
+
+ $extra_addresses = [{'prefix' => 'openstack.org/om/rpc/multicast',
+ 'distribution' => 'multicast'},
+ {'prefix' => 'openstack.org/om/rpc/unicast',
+ 'distribution' => 'closest'},
+ {'prefix' => 'openstack.org/om/rpc/anycast',
+ 'distribution' => 'balanced'},
+ {'prefix' => 'openstack.org/om/notify/multicast',
+ 'distribution' => 'multicast'},
+ {'prefix' => 'openstack.org/om/notify/unicast',
+ 'distribution' => 'closest'},
+ {'prefix' => 'openstack.org/om/notify/anycast',
+ 'distribution' => 'balanced'}]
+
class { '::qdr':
- listener_port => "${qdr_listener_port}",
- } ->
+ listener_addr => '0.0.0.0',
+ listener_port => "${qdr_listener_port}",
+ router_mode => $router_mode,
+ connectors => $connectors,
+ extra_listeners => $extra_listeners,
+ extra_addresses => $extra_addresses,
+ }
+
qdr_user { $qdr_username:
ensure => present,
password => $qdr_password,