aboutsummaryrefslogtreecommitdiffstats
path: root/manifests/profile/base/qdr.pp
blob: 577f3d5b2942e7e4baaff82ca1b1e171612edb16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Copyright 2017 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# == Class: tripleo::profile::base::qdr
#
# Qpid dispatch router profile for tripleo
#
# === Parameters
#
# [*qdr_username*]
#   Username for the qdrouter daemon
#   Defaults to undef
#
# [*qdr_password*]
#   Password for the qdrouter daemon
#   Defaults to undef
#
# [*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.
#   Defaults to hiera('step')
#
class tripleo::profile::base::qdr (
  $qdr_username      = undef,
  $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_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,
    }
  }
}