pacemaker remote profile support
authorMichele Baldessari <michele@acksyn.org>
Tue, 22 Nov 2016 21:03:03 +0000 (22:03 +0100)
committerMichele Baldessari <michele@acksyn.org>
Tue, 24 Jan 2017 14:46:51 +0000 (15:46 +0100)
This support enables a base profile called pacemaker_remote which will
allow the operator to automatically configure the pacemaker_remote
service on such nodes. This manifest also automatically adds any
pacemaker_remote nodes to the pacemaker cluster.

Depends-On: I0c01ecb7df1a0f9856fdc866b9d06acf0283fa4f
Depends-On: Ic0488f4fc63e35b9aede60fae1e2cab34b1fbdd5
Change-Id: I92953afcc7d536d387381f08164cae8b52f41605

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

index a5a2ccd..6021731 100644 (file)
 #   (Optional) The number of times pcs commands should be retried.
 #   Defaults to hiera('pcs_tries', 20)
 #
+# [*remote_short_node_names*]
+#   (Optional) List of short node names for pacemaker remote nodes
+#   Defaults to hiera('pacemaker_remote_short_node_names', [])
+#
+# [*remote_node_ips*]
+#   (Optional) List of node ips for pacemaker remote nodes
+#   Defaults to hiera('pacemaker_remote_node_ips', [])
+#
+# [*remote_authkey*]
+#   (Optional) Authkey for pacemaker remote nodes
+#   Defaults to undef
+#
+# [*remote_reconnect_interval*]
+#   (Optional) Reconnect interval for the remote
+#   Defaults to hiera('pacemaker_remote_reconnect_interval', 60)
+#
+# [*remote_monitor_interval*]
+#   (Optional) Monitor interval for the remote
+#   Defaults to hiera('pacemaker_monitor_reconnect_interval', 20)
+#
+# [*remote_tries*]
+#   (Optional) Number of tries for the remote resource creation
+#   Defaults to hiera('pacemaker_remote_tries', 5)
+#
+# [*remote_try_sleep*]
+#   (Optional) Number of seconds to sleep between remote creation tries
+#   Defaults to hiera('pacemaker_remote_try_sleep', 60)
+#
 class tripleo::profile::base::pacemaker (
-  $step      = hiera('step'),
-  $pcs_tries = hiera('pcs_tries', 20),
+  $step                      = hiera('step'),
+  $pcs_tries                 = hiera('pcs_tries', 20),
+  $remote_short_node_names   = hiera('pacemaker_remote_short_node_names', []),
+  $remote_node_ips           = hiera('pacemaker_remote_node_ips', []),
+  $remote_authkey            = undef,
+  $remote_reconnect_interval = hiera('pacemaker_remote_reconnect_interval', 60),
+  $remote_monitor_interval   = hiera('pacemaker_remote_monitor_interval', 20),
+  $remote_tries              = hiera('pacemaker_remote_tries', 5),
+  $remote_try_sleep          = hiera('pacemaker_remote_try_sleep', 60),
 ) {
+
+  if count($remote_short_node_names) != count($remote_node_ips) {
+    fail("Count of ${remote_short_node_names} is not equal to count of ${remote_node_ips}")
+  }
+
   Pcmk_resource <| |> {
     tries     => 10,
     try_sleep => 3,
@@ -60,6 +100,7 @@ class tripleo::profile::base::pacemaker (
       cluster_members      => $pacemaker_cluster_members,
       setup_cluster        => $pacemaker_master,
       cluster_setup_extras => $cluster_setup_extras,
+      remote_authkey       => $remote_authkey,
     }
     class { '::pacemaker::stonith':
       disable => !$enable_fencing,
@@ -75,6 +116,21 @@ class tripleo::profile::base::pacemaker (
       # enable stonith after all fencing devices have been created
       Class['tripleo::fencing'] -> Class['pacemaker::stonith']
     }
+    # We have pacemaker remote nodes configured so let's add them as resources
+    # We do this during step 1 right after wait-for-settle, because during step 2
+    # resources might already be created on pacemaker remote nodes and we need
+    # a guarantee that remote nodes are already up
+    if $pacemaker_master and count($remote_short_node_names) > 0 {
+      # Creates a { "node" => "ip_address", ...} hash
+      $remotes_hash = hash(zip($remote_short_node_names, $remote_node_ips))
+      pacemaker::resource::remote { $remote_short_node_names:
+        remote_address     => $remotes_hash[$title],
+        reconnect_interval => $remote_reconnect_interval,
+        op_params          => "monitor interval=${remote_monitor_interval}",
+        tries              => $remote_tries,
+        try_sleep          => $remote_try_sleep,
+      }
+    }
   }
 
   if $step >= 2 {
diff --git a/manifests/profile/base/pacemaker_remote.pp b/manifests/profile/base/pacemaker_remote.pp
new file mode 100644 (file)
index 0000000..e0fff63
--- /dev/null
@@ -0,0 +1,37 @@
+# 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_remote
+#
+# Pacemaker remote profile for tripleo
+#
+# === Parameters
+#
+# [*remote_authkey*]
+#   Authkey for pacemaker remote nodes
+#   Defaults to unset
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+class tripleo::profile::base::pacemaker_remote (
+  $remote_authkey,
+  $step           = hiera('step'),
+) {
+  class { '::pacemaker::remote':
+    remote_authkey => $remote_authkey,
+  }
+}