dev/provisioning/modules/elasticsearch/manifests/package/pin.pp
changeset 406 cf0f23803a53
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/provisioning/modules/elasticsearch/manifests/package/pin.pp	Wed Nov 09 15:05:41 2016 +0100
@@ -0,0 +1,70 @@
+# == Class: elasticsearch::package::pin
+#
+# Controls package pinning for the Elasticsearch package.
+#
+# === Parameters
+#
+# This class does not provide any parameters.
+#
+# === Examples
+#
+# This class may be imported by other classes to use its functionality:
+#   class { 'elasticsearch::package::pin': }
+#
+# It is not intended to be used directly by external resources like node
+# definitions or other modules.
+#
+# === Authors
+#
+# * Tyler Langlois <mailto:tyler@elastic.co>
+#
+class elasticsearch::package::pin {
+
+  Exec {
+    path => [ '/bin', '/usr/bin', '/usr/local/bin' ],
+    cwd  => '/',
+  }
+
+  case $::osfamily {
+    'Debian': {
+      include ::apt
+
+      if ($elasticsearch::ensure == 'absent') {
+        apt::pin { $elasticsearch::package_name:
+          ensure => $elasticsearch::ensure,
+        }
+      } elsif ($elasticsearch::version != false) {
+        apt::pin { $elasticsearch::package_name:
+          ensure   => $elasticsearch::ensure,
+          packages => $elasticsearch::package_name,
+          version  => $elasticsearch::version,
+          priority => 1000,
+        }
+      }
+
+    }
+    'RedHat', 'Linux': {
+
+      if ($elasticsearch::ensure == 'absent') {
+        $_versionlock = '/etc/yum/pluginconf.d/versionlock.list'
+        $_lock_line = '0:elasticsearch-'
+        exec { 'elasticsearch_purge_versionlock.list':
+          command => "sed -i '/${_lock_line}/d' ${_versionlock}",
+          onlyif  => [
+            "test -f ${_versionlock}",
+            "grep -F '${_lock_line}' ${_versionlock}",
+          ],
+        }
+      } elsif ($elasticsearch::version != false) {
+        yum::versionlock {
+          "0:elasticsearch-${elasticsearch::pkg_version}.noarch":
+            ensure => $elasticsearch::ensure,
+        }
+      }
+
+    }
+    default: {
+      warning("Unable to pin package for OSfamily \"${::osfamily}\".")
+    }
+  }
+}