Giuseppe Lavagetto has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/365900 )

Change subject: systemd: add defines to manage systemd units
......................................................................

systemd: add defines to manage systemd units

A simpler, less integrated approach to manage systemd-related files than
the one proposed by base::system_unit, which is mostly a (complicated)
attempt at supporting multiple init systems.

For systemd-only catalogs, a simpler, leaner series of defines should
make things clearer and reduce the level of indirection we have.

Specifically:

* We do not handle the Service definition, that is handled externally.
* A single exec is defined for daemon-reload, so we can avoid doing
  multiple daemon-reloads.
* A separate define handles systemd overrides and systemd unit files

Change-Id: Ia4199b149804641bcc7d1957e7a0065fb7d5fa8b
---
A modules/systemd/manifests/file.pp
A modules/systemd/manifests/init.pp
A modules/systemd/manifests/override.pp
A modules/systemd/manifests/unit.pp
4 files changed, 132 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/00/365900/1

diff --git a/modules/systemd/manifests/file.pp 
b/modules/systemd/manifests/file.pp
new file mode 100644
index 0000000..d050390
--- /dev/null
+++ b/modules/systemd/manifests/file.pp
@@ -0,0 +1,45 @@
+# == systemd::file ==
+#
+# This define creates a file on the filesystem at $path,
+# schedules a daemon-reload of systemd and, if requested,
+# schedules a subsequent refresh of the service.
+#
+# === Parameters ===
+#
+# [*content*]
+#   The content of the file. Required.
+# [*service_name*]
+#   The name of the service this file refers to. Required.
+# [*ensure*]
+#   The usual meta-parameter, defaults to present. Valid values are
+#   'absent' and 'present'
+# [*restart*]
+#   Whether to handle restarting the service when the file changes.
+#
+define systemd::file(
+    $content,
+    $service_name,
+    $ensure=present,
+    $restart=false
+){
+    require ::systemd
+    file { $title:
+        ensure  => $ensure,
+        content => $content,
+        mode    => '0444',
+        owner   => 'root',
+        group   => 'root',
+        notify  => Exec['systemd daemon-reload'],
+    }
+
+    # If the service is defined, add a dependency. If automatic restarts
+    # are requested, also refresh the service resource.
+    if defined(Service[$service_name]) {
+        if $restart {
+            # Refresh the service
+            File[$title] ~> Service[$service_name]
+        } else {
+            File[$title] -> Service[$service_name]
+        }
+    }
+}
diff --git a/modules/systemd/manifests/init.pp 
b/modules/systemd/manifests/init.pp
new file mode 100644
index 0000000..e73b714
--- /dev/null
+++ b/modules/systemd/manifests/init.pp
@@ -0,0 +1,18 @@
+# == Class systemd ==
+#
+# This class just defines a the systemctl daemon-reload exec
+# that systemd::file defines can notify to.
+#
+class systemd {
+    if $::initsystem != 'systemd' {
+        fail('You can only include the systemd class on systems using 
systemd.')
+    }
+
+    exec { 'systemd daemon-reload':
+        refreshonly => true,
+        command     => '/bin/systemctl daemon-reload',
+    }
+    # Make the service actions happen after the daemon-reload if that
+    # is happening.
+    Exec['systemd daemon-reload'] -> Service<| |>
+}
diff --git a/modules/systemd/manifests/override.pp 
b/modules/systemd/manifests/override.pp
new file mode 100644
index 0000000..170e9ca
--- /dev/null
+++ b/modules/systemd/manifests/override.pp
@@ -0,0 +1,40 @@
+# == systemd::override ===
+#
+# Defines a systemd override file, properly handling dependencies of the
+# corresponding service and reload of systemd.
+#
+# === Parameters ===
+#
+# [*content*]
+#   The content of the file. Required.
+# [*ensure*]
+#   The usual meta-parameter, defaults to present. Valid values are
+#   'absent' and 'present'
+# [*restart*]
+#   Whether to handle restarting the service when the file changes.
+#
+define systemd::override(
+    $ensure = present,
+    $content = undef,
+    $restart = false,
+){
+    validate_ensure($ensure)
+    $systemd_override_dir = "/etc/systemd/system/${name}.service.d"
+
+    $override = "${systemd_override_dir}/puppet-override.conf"
+    if !defined(File[$systemd_override_dir]) {
+        file { "/etc/systemd/system/${title}.service.d":
+            ensure => ensure_directory($ensure),
+            owner  => 'root',
+            group  => 'root',
+            mode   => '0555',
+        }
+    }
+
+    systemd::file { $override:
+        ensure       => $ensure,
+        content      => $content,
+        service_name => $title,
+        restart      => $restart
+    }
+}
diff --git a/modules/systemd/manifests/unit.pp 
b/modules/systemd/manifests/unit.pp
new file mode 100644
index 0000000..73c62bb
--- /dev/null
+++ b/modules/systemd/manifests/unit.pp
@@ -0,0 +1,29 @@
+# == systemd::unit ===
+#
+# Defines a systemd unit file, properly handling dependencies of the
+# corresponding service and reload of systemd.
+#
+# === Parameters ===
+#
+# [*content*]
+#   The content of the file. Required.
+# [*ensure*]
+#   The usual meta-parameter, defaults to present. Valid values are
+#   'absent' and 'present'
+# [*restart*]
+#   Whether to handle restarting the service when the file changes.
+#
+define systemd::unit(
+    $content,
+    $ensure  = 'present',
+    $restart = false,
+){
+    $path = "/lib/systemd/system/${title}.service"
+
+    systemd::file { $path:
+        ensure       => present,
+        content      => $content,
+        service_name => $title,
+        restart      => $restart
+    }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/365900
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia4199b149804641bcc7d1957e7a0065fb7d5fa8b
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Giuseppe Lavagetto <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to