Implement Pacemaker service profile
authorEmilien Macchi <emilien@redhat.com>
Mon, 11 Jul 2016 19:45:43 +0000 (15:45 -0400)
committerEmilien Macchi <emilien@redhat.com>
Tue, 12 Jul 2016 17:38:08 +0000 (17:38 +0000)
Change-Id: I46215f82480854b5e04aef1ac1609dd99455181b
Closes-Bug: #1601970

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

diff --git a/manifests/profile/base/pacemaker.pp b/manifests/profile/base/pacemaker.pp
new file mode 100644 (file)
index 0000000..fc58891
--- /dev/null
@@ -0,0 +1,93 @@
+# 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::pacemaker
+#
+# Pacemaker profile for tripleo
+#
+# === Parameters
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+class tripleo::profile::base::pacemaker (
+  $step = hiera('step'),
+) {
+
+  Pcmk_resource <| |> {
+    tries     => 10,
+    try_sleep => 3,
+  }
+
+  if $::hostname == downcase(hiera('bootstrap_nodeid')) {
+    $pacemaker_master = true
+  } else {
+    $pacemaker_master = false
+  }
+
+  $enable_fencing = str2bool(hiera('enable_fencing', false)) and hiera('step') >= 5
+
+  if hiera('step') >= 1 {
+    $pacemaker_cluster_members = downcase(regsubst(hiera('controller_node_names'), ',', ' ', 'G'))
+    $corosync_ipv6 = str2bool(hiera('corosync_ipv6', false))
+    if $corosync_ipv6 {
+      $cluster_setup_extras = { '--token' => hiera('corosync_token_timeout', 1000), '--ipv6' => '' }
+    } else {
+      $cluster_setup_extras = { '--token' => hiera('corosync_token_timeout', 1000) }
+    }
+    class { '::pacemaker':
+      hacluster_pwd => hiera('hacluster_pwd'),
+    } ->
+    class { '::pacemaker::corosync':
+      cluster_members      => $pacemaker_cluster_members,
+      setup_cluster        => $pacemaker_master,
+      cluster_setup_extras => $cluster_setup_extras,
+    }
+    class { '::pacemaker::stonith':
+      disable => !$enable_fencing,
+    }
+    if $enable_fencing {
+      include ::tripleo::fencing
+
+      # enable stonith after all Pacemaker resources have been created
+      Pcmk_resource<||> -> Class['tripleo::fencing']
+      Pcmk_constraint<||> -> Class['tripleo::fencing']
+      Exec <| tag == 'pacemaker_constraint' |> -> Class['tripleo::fencing']
+      # enable stonith after all fencing devices have been created
+      Class['tripleo::fencing'] -> Class['pacemaker::stonith']
+    }
+
+    # FIXME(gfidente): sets 200secs as default start timeout op
+    # param; until we can use pcmk global defaults we'll still
+    # need to add it to every resource which redefines op params
+    Pacemaker::Resource::Service {
+      op_params => 'start timeout=200s stop timeout=200s',
+    }
+  }
+
+  if hiera('step') >= 2 {
+    if $pacemaker_master {
+      include ::pacemaker::resource_defaults
+
+      # Create an openstack-core dummy resource. See RHBZ 1290121
+      pacemaker::resource::ocf { 'openstack-core':
+        ocf_agent_name => 'heartbeat:Dummy',
+        clone_params   => true,
+      }
+    }
+  }
+
+}