]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/elasticsearch/manifests/plugin.pp
Add new module elasticsearch for listsearch
[dsa-puppet.git] / 3rdparty / modules / elasticsearch / manifests / plugin.pp
diff --git a/3rdparty/modules/elasticsearch/manifests/plugin.pp b/3rdparty/modules/elasticsearch/manifests/plugin.pp
new file mode 100644 (file)
index 0000000..f49a6bd
--- /dev/null
@@ -0,0 +1,126 @@
+# == Define: elasticsearch::plugin
+#
+# This define allows you to install arbitrary Elasticsearch plugins
+# either by using the default repositories or by specifying an URL
+#
+# All default values are defined in the elasticsearch::params class.
+#
+#
+# === Parameters
+#
+# [*module_dir*]
+#   Directory name where the module will be installed
+#   Value type is string
+#   Default value: None
+#   This variable is required
+#
+# [*ensure*]
+#   Whether the plugin will be installed or removed.
+#   Set to 'absent' to ensure a plugin is not installed
+#   Value type is string
+#   Default value: present
+#   This variable is optional
+#
+# [*url*]
+#   Specify an URL where to download the plugin from.
+#   Value type is string
+#   Default value: None
+#   This variable is optional
+#
+# [*proxy_host*]
+#   Proxy host to use when installing the plugin
+#   Value type is string
+#   Default value: None
+#   This variable is optional
+#
+# [*proxy_port*]
+#   Proxy port to use when installing the plugin
+#   Value type is number
+#   Default value: None
+#   This variable is optional
+#
+# [*instances*]
+#   Specify all the instances related
+#   value type is string or array
+#
+# === Examples
+#
+# # From official repository
+# elasticsearch::plugin{'mobz/elasticsearch-head': module_dir => 'head'}
+#
+# # From custom url
+# elasticsearch::plugin{ 'elasticsearch-jetty':
+#  module_dir => 'elasticsearch-jetty',
+#  url        => 'https://oss-es-plugins.s3.amazonaws.com/elasticsearch-jetty/elasticsearch-jetty-0.90.0.zip',
+# }
+#
+# === Authors
+#
+# * Matteo Sessa <mailto:matteo.sessa@catchoftheday.com.au>
+# * Dennis Konert <mailto:dkonert@gmail.com>
+# * Richard Pijnenburg <mailto:richard.pijnenburg@elasticsearch.com>
+#
+define elasticsearch::plugin(
+    $module_dir,
+    $instances,
+    $ensure      = 'present',
+    $url         = '',
+    $proxy_host  = undef,
+    $proxy_port  = undef,
+) {
+
+  include elasticsearch
+
+  Exec {
+    path      => [ '/bin', '/usr/bin', '/usr/local/bin' ],
+    cwd       => '/',
+    user      => $elasticsearch::elasticsearch_user,
+    tries     => 6,
+    try_sleep => 10
+  }
+
+  $notify_service = $elasticsearch::restart_on_change ? {
+    false   => undef,
+    default => Elasticsearch::Service[$instances],
+  }
+
+  if ($module_dir != '') {
+      validate_string($module_dir)
+  } else {
+      fail("module_dir undefined for plugin ${name}")
+  }
+
+  if ($proxy_host != undef and $proxy_port != undef) {
+    $proxy = " -DproxyPort=${proxy_port} -DproxyHost=${proxy_host}"
+  } else {
+    $proxy = ''
+  }
+
+  if ($url != '') {
+    validate_string($url)
+    $install_cmd = "${elasticsearch::plugintool}${proxy} -install ${name} -url ${url}"
+    $exec_rets = [0,1]
+  } else {
+    $install_cmd = "${elasticsearch::plugintool}${proxy} -install ${name}"
+    $exec_rets = [0,]
+  }
+
+  case $ensure {
+    'installed', 'present': {
+      exec {"install_plugin_${name}":
+        command => $install_cmd,
+        creates => "${elasticsearch::plugindir}/${module_dir}",
+        returns => $exec_rets,
+        notify  => $notify_service,
+        require => File[$elasticsearch::plugindir]
+      }
+    }
+    default: {
+      exec {"remove_plugin_${name}":
+        command => "${elasticsearch::plugintool} --remove ${module_dir}",
+        onlyif  => "test -d ${elasticsearch::plugindir}/${module_dir}",
+        notify  => $notify_service,
+      }
+    }
+  }
+}