Add systemd module, required by rabbitmq
[mirror/dsa-puppet.git] / 3rdparty / modules / systemd / manifests / unit_file.pp
diff --git a/3rdparty/modules/systemd/manifests/unit_file.pp b/3rdparty/modules/systemd/manifests/unit_file.pp
new file mode 100644 (file)
index 0000000..3c0406e
--- /dev/null
@@ -0,0 +1,78 @@
+# Creates a systemd unit file
+#
+# @api public
+#
+# @see systemd.unit(5)
+#
+# @attr name [Pattern['^.+\.(service|socket|device|mount|automount|swap|target|path|timer|slice|scope)$']]
+#   The target unit file to create
+#
+#   * Must not contain ``/``
+#
+# @attr path
+#   The main systemd configuration path
+#
+# @attr content
+#   The full content of the unit file
+#
+#   * Mutually exclusive with ``$source``
+#
+# @attr source
+#   The ``File`` resource compatible ``source``
+#
+#   * Mutually exclusive with ``$content``
+#
+# @attr target
+#   If set, will force the file to be a symlink to the given target
+#
+#   * Mutually exclusive with both ``$source`` and ``$content``
+#
+# @attr enable
+#   If set, will manage the unit enablement status.
+#
+# @attr active
+#   If set, will manage the state of the unit.
+#
+define systemd::unit_file(
+  Enum['present', 'absent', 'file']        $ensure  = 'present',
+  Stdlib::Absolutepath                     $path    = '/etc/systemd/system',
+  Optional[String]                         $content = undef,
+  Optional[String]                         $source  = undef,
+  Optional[Stdlib::Absolutepath]           $target  = undef,
+  Optional[Variant[Boolean, Enum['mask']]] $enable  = undef,
+  Optional[Boolean]                        $active  = undef,
+) {
+  include systemd
+
+  assert_type(Systemd::Unit, $name)
+
+  if $target {
+    $_ensure = 'link'
+  } else {
+    $_ensure = $ensure ? {
+      'present' => 'file',
+      default   => $ensure,
+    }
+  }
+
+  file { "${path}/${name}":
+    ensure  => $_ensure,
+    content => $content,
+    source  => $source,
+    target  => $target,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0444',
+    notify  => Class['systemd::systemctl::daemon_reload'],
+  }
+
+  if $enable != undef or $active != undef {
+    service { $name:
+      ensure    => $active,
+      enable    => $enable,
+      provider  => 'systemd',
+      subscribe => File["${path}/${name}"],
+      require   => Class['systemd::systemctl::daemon_reload'],
+    }
+  }
+}