Composable role for RabbitMQ
authorEmilien Macchi <emilien@redhat.com>
Mon, 2 May 2016 20:42:21 +0000 (16:42 -0400)
committerEmilien Macchi <emilien@redhat.com>
Tue, 17 May 2016 21:50:45 +0000 (23:50 +0200)
Add RabbitMQ composable role, and keep the same logic that we had in
THT.

Implements: blueprint refactor-puppet-manifests
Change-Id: I961bdbe1cc6dd1d4a315de616439f9fc77d793ae

manifests/profile/base/rabbitmq.pp [new file with mode: 0644]
manifests/profile/pacemaker/rabbitmq.pp [new file with mode: 0644]

diff --git a/manifests/profile/base/rabbitmq.pp b/manifests/profile/base/rabbitmq.pp
new file mode 100644 (file)
index 0000000..e67d71a
--- /dev/null
@@ -0,0 +1,91 @@
+# Copyright 2016 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::rabbitmq
+#
+# RabbitMQ profile for tripleo
+#
+# === Parameters
+#
+# [*nodes*]
+#   (Optional) Array of host(s) for RabbitMQ nodes.
+#   Defaults to hiera('rabbit_node_ips', []).
+#
+# [*ipv6*]
+#   (Optional) Whether to deploy RabbitMQ on IPv6 network.
+#   Defaults to str2bool(hiera('rabbit_ipv6', false)).
+#
+# [*environment*]
+#   (Optional) RabbitMQ environment.
+#   Defaults to hiera('rabbitmq_environment').
+#
+# [*kernel_variables*]
+#   (Optional) RabbitMQ environment.
+#   Defaults to hiera('rabbitmq_environment').
+#
+# [*config_variables*]
+#   (Optional) RabbitMQ environment.
+#   Defaults to hiera('rabbitmq_config_variables').
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+class tripleo::profile::base::rabbitmq (
+  $nodes            = hiera('rabbit_node_ips', []),
+  $ipv6             = str2bool(hiera('rabbit_ipv6', false)),
+  $environment      = hiera('rabbitmq_environment'),
+  $kernel_variables = hiera('rabbitmq_kernel_variables'),
+  $config_variables = hiera('rabbitmq_config_variables'),
+  $step             = hiera('step'),
+) {
+
+  # IPv6 environment, necessary for RabbitMQ.
+  if $ipv6 {
+    $rabbit_env = merge($environment, {
+      'RABBITMQ_SERVER_START_ARGS' => '"-proto_dist inet6_tcp"'
+    })
+  } else {
+    $rabbit_env = $environment
+  }
+
+  $manage_service = hiera('rabbitmq::service_manage', true)
+  if $step >= 1 {
+    # Specific configuration for multi-nodes or when running with Pacemaker.
+    if count($nodes) > 1 or ! $manage_service {
+      class { '::rabbitmq':
+        config_cluster          => $manage_service,
+        cluster_nodes           => $nodes,
+        tcp_keepalive           => false,
+        config_kernel_variables => $kernel_variables,
+        config_variables        => $config_variables,
+        environment_variables   => $rabbit_env,
+      }
+      # when running multi-nodes without Pacemaker
+      if $manage_service {
+        rabbitmq_policy { 'ha-all@/':
+          pattern    => '^(?!amq\.).*',
+          definition => {
+            'ha-mode' => 'all',
+          },
+        }
+      }
+    } else {
+      # Standard configuration
+      include ::rabbitmq
+    }
+  }
+
+}
diff --git a/manifests/profile/pacemaker/rabbitmq.pp b/manifests/profile/pacemaker/rabbitmq.pp
new file mode 100644 (file)
index 0000000..efb91b5
--- /dev/null
@@ -0,0 +1,67 @@
+# Copyright 2016 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::pacemaker::rabbitmq
+#
+# RabbitMQ Pacemaker HA profile for tripleo
+#
+# === Parameters
+#
+# [*bootstrap_node*]
+#   (Optional) The hostname of the node responsible for bootstrapping tasks
+#   Defaults to hiera('bootstrap_nodeid')
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+# [*erlang_cookie*]
+#   (Optional) Content of erlang cookie.
+#   Defaults to hiera('rabbitmq::erlang_cookie').
+#
+class tripleo::profile::pacemaker::rabbitmq (
+  $bootstrap_node = hiera('bootstrap_nodeid'),
+  $step           = hiera('step'),
+  $erlang_cookie  = hiera('rabbitmq::erlang_cookie'),
+) {
+
+  if $::hostname == downcase($bootstrap_node) {
+    $pacemaker_master = true
+  } else {
+    $pacemaker_master = false
+  }
+
+  include ::tripleo::profile::base::rabbitmq
+
+  file { '/var/lib/rabbitmq/.erlang.cookie':
+    ensure  => file,
+    owner   => 'rabbitmq',
+    group   => 'rabbitmq',
+    mode    => '0400',
+    content => $erlang_cookie,
+    replace => true,
+    require => Class['::rabbitmq'],
+  }
+
+  if $step >= 2 and $pacemaker_master {
+    pacemaker::resource::ocf { 'rabbitmq':
+      ocf_agent_name  => 'heartbeat:rabbitmq-cluster',
+      resource_params => 'set_policy=\'ha-all ^(?!amq\.).* {"ha-mode":"all"}\'',
+      clone_params    => 'ordered=true interleave=true',
+      meta_params     => 'notify=true',
+      require         => Class['::rabbitmq'],
+    }
+  }
+}