Add systemd module, required by rabbitmq
[mirror/dsa-puppet.git] / 3rdparty / modules / systemd / manifests / service_limits.pp
diff --git a/3rdparty/modules/systemd/manifests/service_limits.pp b/3rdparty/modules/systemd/manifests/service_limits.pp
new file mode 100644 (file)
index 0000000..bbeb1cb
--- /dev/null
@@ -0,0 +1,77 @@
+# Adds a set of custom limits to the service
+#
+# @api public
+#
+# @see systemd.exec(5)
+#
+# @attr name [Pattern['^.+\.(service|socket|mount|swap)$']]
+#   The name of the service that you will be modifying
+#
+# @param $ensure
+#   Whether to drop a file or remove it
+#
+# @param path
+#   The path to the main systemd settings directory
+#
+# @param limits
+#   A Hash of service limits matching the settings in ``systemd.exec(5)``
+#
+#   * Mutually exclusive with ``$source``
+#
+# @param source
+#   A ``File`` resource compatible ``source``
+#
+#  * Mutually exclusive with ``$limits``
+#
+# @param restart_service
+#   Restart the managed service after setting the limits
+#
+define systemd::service_limits(
+  Enum['present', 'absent', 'file'] $ensure          = 'present',
+  Stdlib::Absolutepath              $path            = '/etc/systemd/system',
+  Optional[Systemd::ServiceLimits]  $limits          = undef,
+  Optional[String]                  $source          = undef,
+  Boolean                           $restart_service = true
+) {
+
+  include systemd
+
+  if $name !~ Pattern['^.+\.(service|socket|mount|swap)$'] {
+    fail('$name must match Pattern["^.+\.(service|socket|mount|swap)$"]')
+  }
+
+  if $limits and !empty($limits) {
+    $_content = template("${module_name}/limits.erb")
+  }
+  else {
+    $_content = undef
+  }
+
+  if $ensure != 'absent' {
+    if ($limits and !empty($limits)) and $source {
+      fail('You may not supply both limits and source parameters to systemd::service_limits')
+    }
+    elsif ($limits == undef or empty($limits)) and ($source == undef) {
+      fail('You must supply either the limits or source parameter to systemd::service_limits')
+    }
+  }
+
+  systemd::dropin_file { "${name}-90-limits.conf":
+    ensure   => $ensure,
+    unit     => $name,
+    filename => '90-limits.conf',
+    path     => $path,
+    content  => $_content,
+    source   => $source,
+  }
+
+  if $restart_service {
+    exec { "restart ${name} because limits":
+      command     => "systemctl restart ${name}",
+      path        => $::path,
+      refreshonly => true,
+      subscribe   => File["${path}/${name}.d/90-limits.conf"],
+      require     => Class['systemd::systemctl::daemon_reload'],
+    }
+  }
+}