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