jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/333085 )

Change subject: Add a define to make adding systemd units easier
......................................................................


Add a define to make adding systemd units easier

systemd::service is a dumbed down copy of operations/puppet.git's
base::service_unit that only knows how to setup a systemd unit and
associated service.

Existing systemd units are converted to use the new define.

Change-Id: I0700550313c5b25b3d73cd08aaacc6b7e0fba794
---
M puppet/modules/cgroup/manifests/init.pp
R puppet/modules/cgroup/templates/systemd/cgrulesengd.erb
M puppet/modules/hhvm/manifests/fcgi.pp
R puppet/modules/hhvm/templates/systemd/hhvm.erb
M puppet/modules/mediawiki/manifests/jobrunner.pp
M puppet/modules/mediawiki/manifests/ready_service.pp
R puppet/modules/mediawiki/templates/systemd/jobchron.erb
R puppet/modules/mediawiki/templates/systemd/jobrunner.erb
R puppet/modules/mediawiki/templates/systemd/mediawiki-ready.erb
M puppet/modules/sentry/manifests/init.pp
R puppet/modules/sentry/templates/systemd/sentry-server.erb
R puppet/modules/sentry/templates/systemd/sentry-worker.erb
M puppet/modules/service/manifests/node.pp
R puppet/modules/service/templates/systemd/node.erb
M puppet/modules/statsd/manifests/init.pp
R puppet/modules/statsd/templates/systemd/statsd.erb
A puppet/modules/systemd/manifests/service.pp
M puppet/modules/xvfb/manifests/init.pp
R puppet/modules/xvfb/templates/systemd/xvfb.erb
M puppet/modules/zotero/manifests/init.pp
R puppet/modules/zotero/templates/systemd/zotero.erb
21 files changed, 162 insertions(+), 237 deletions(-)

Approvals:
  Muehlenhoff: Looks good to me, but someone else must approve
  BryanDavis: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/puppet/modules/cgroup/manifests/init.pp 
b/puppet/modules/cgroup/manifests/init.pp
index 157c8de..f009e0f 100644
--- a/puppet/modules/cgroup/manifests/init.pp
+++ b/puppet/modules/cgroup/manifests/init.pp
@@ -5,33 +5,16 @@
 class cgroup {
     require_package('cgroup-bin')
 
-    file { '/lib/systemd/system/cgrulesengd.service':
-        ensure => present,
-        source => 'puppet:///modules/cgroup/cgrulesengd.systemd',
-        owner  => 'root',
-        group  => 'root',
-        mode   => '0644',
-    }
-    exec { 'systemd reload for cgrulesengd':
-      refreshonly => true,
-      command     => '/bin/systemctl daemon-reload',
-      subscribe   => File['/lib/systemd/system/cgrulesengd.service'],
-    }
-
     # The reason we need the daemon is that upstart won't work with cgexec.
     # As a result, if we want to put a service started via upstart into a
     # cgroup, we need cgrulesengd to be running and set the service's process
     # to a cgroup by system user/group
-
-    service { 'cgrulesengd':
-        ensure    => running,
-        enable    => true,
-        provider  => 'systemd',
-        require   => [
-            Package['cgroup-bin'],
-            Exec['systemd reload for cgrulesengd'],
-        ],
-        subscribe => File['/etc/init/cgrulesengd.conf']
+    systemd::service { 'cgrulesengd':
+        ensure         => 'present',
+        require        => Package['cgroup-bin'],
+        service_params => {
+            subscribe => File['/etc/init/cgrulesengd.conf'],
+        },
     }
 
     exec { 'cgconfigparser':
diff --git a/puppet/modules/cgroup/files/cgrulesengd.upstart 
b/puppet/modules/cgroup/templates/systemd/cgrulesengd.erb
similarity index 100%
rename from puppet/modules/cgroup/files/cgrulesengd.upstart
rename to puppet/modules/cgroup/templates/systemd/cgrulesengd.erb
diff --git a/puppet/modules/hhvm/manifests/fcgi.pp 
b/puppet/modules/hhvm/manifests/fcgi.pp
index 5ff477c..4e0d92d 100644
--- a/puppet/modules/hhvm/manifests/fcgi.pp
+++ b/puppet/modules/hhvm/manifests/fcgi.pp
@@ -6,40 +6,17 @@
     require ::hhvm
     require ::mediawiki::ready_service
 
-    $systemd_dir = '/etc/systemd/system/hhvm.service.d'
-    file { $systemd_dir:
-        ensure => directory,
-        owner  => 'root',
-        group  => 'root',
-        mode   => '0555',
-    }
-
-    file { "${systemd_dir}/puppet-override.conf":
-        ensure  => file,
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        content => template('hhvm/hhvm.systemd.erb'),
-        notify  => Service['hhvm'],
-    }
-
-    exec { 'systemd reload for hhvm':
-        refreshonly => true,
-        command     => '/bin/systemctl daemon-reload',
-        subscribe   => File["${systemd_dir}/puppet-override.conf"],
-        notify      => Service['hhvm'],
-    }
-
-    service { 'hhvm':
-        ensure    => running,
-        enable    => true,
-        provider  => 'systemd',
-        subscribe => [
-            Package['hhvm'],
-            Package[$::hhvm::ext_pkgs],
-            File['/etc/hhvm/server.ini'],
-            File['/etc/default/hhvm'],
-        ],
+    systemd::service { 'hhvm':
+        ensure         => 'present',
+        is_override    => true,
+        service_params => {
+            subscribe => [
+                Package['hhvm'],
+                Package[$::hhvm::ext_pkgs],
+                File['/etc/hhvm/server.ini'],
+                File['/etc/default/hhvm'],
+            ],
+        },
     }
 }
 
diff --git a/puppet/modules/hhvm/templates/hhvm.systemd.erb 
b/puppet/modules/hhvm/templates/systemd/hhvm.erb
similarity index 100%
rename from puppet/modules/hhvm/templates/hhvm.systemd.erb
rename to puppet/modules/hhvm/templates/systemd/hhvm.erb
diff --git a/puppet/modules/mediawiki/manifests/jobrunner.pp 
b/puppet/modules/mediawiki/manifests/jobrunner.pp
index c4526e3..f9cc1c6 100644
--- a/puppet/modules/mediawiki/manifests/jobrunner.pp
+++ b/puppet/modules/mediawiki/manifests/jobrunner.pp
@@ -26,8 +26,8 @@
     require ::mediawiki
 
     $ensure = $enable ? {
-        false   => 'stopped',
-        default => 'running',
+        false   => 'absent',
+        default => 'present',
     }
 
     $restart = $enable ? {
@@ -49,32 +49,6 @@
             Service['jobrunner'],
             Service['jobchron'],
         ],
-    }
-
-    file { '/lib/systemd/system/jobrunner.service':
-        content => template('mediawiki/jobrunner.systemd.erb'),
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        notify  => Service['jobrunner'],
-    }
-    exec { 'systemd reload for jobrunner':
-      refreshonly => true,
-      command     => '/bin/systemctl daemon-reload',
-      subscribe   => File['/lib/systemd/system/jobrunner.service'],
-    }
-
-    file { '/lib/systemd/system/jobchron.service':
-        content => template('mediawiki/jobchron.systemd.erb'),
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        notify  => Service['jobchron'],
-    }
-    exec { 'systemd reload for jobchron':
-      refreshonly => true,
-      command     => '/bin/systemctl daemon-reload',
-      subscribe   => File['/lib/systemd/system/jobchron.service'],
     }
 
     file { '/etc/jobrunner.json':
@@ -113,23 +87,13 @@
         restart => $restart,
     }
 
-    service { 'jobrunner':
-        ensure   => $ensure,
-        enable   => $enable,
-        provider => 'systemd',
-        require  => [
-            Mediawiki::Wiki[$::mediawiki::wiki_name],
-            Exec['systemd reload for jobrunner'],
-        ],
+    systemd::service { 'jobrunner':
+        ensure  => $ensure,
+        require => Mediawiki::Wiki[$::mediawiki::wiki_name],
     }
 
-    service { 'jobchron':
-        ensure   => $ensure,
-        enable   => $enable,
-        provider => 'systemd',
-        require  => [
-            Mediawiki::Wiki[$::mediawiki::wiki_name],
-            Exec['systemd reload for jobchron'],
-        ],
+    systemd::service { 'jobchron':
+        ensure  => $ensure,
+        require => Mediawiki::Wiki[$::mediawiki::wiki_name],
     }
 }
diff --git a/puppet/modules/mediawiki/manifests/ready_service.pp 
b/puppet/modules/mediawiki/manifests/ready_service.pp
index 83356be..af64928 100644
--- a/puppet/modules/mediawiki/manifests/ready_service.pp
+++ b/puppet/modules/mediawiki/manifests/ready_service.pp
@@ -26,27 +26,8 @@
         content => template('mediawiki/wait-for-mediawiki.sh.erb'),
     }
 
-    file { '/lib/systemd/system/mediawiki-ready.service':
+    systemd::service { 'mediawiki-ready':
         ensure  => 'present',
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        content => template('mediawiki/mediawiki-ready.systemd.erb'),
-        require => File['/usr/local/bin/wait-for-mediawiki.sh'],
-    }
-
-    exec { 'systemd reload for mediawiki-ready':
-      refreshonly => true,
-      command     => '/bin/systemctl daemon-reload',
-      subscribe   => File['/lib/systemd/system/mediawiki-ready.service'],
-    }
-
-    service { 'mediawiki-ready':
-        enable  => true,
-        require => [
-            File['/lib/systemd/system/mediawiki-ready.service'],
-            Exec['systemd reload for mediawiki-ready'],
-            MediaWiki::Wiki[$::mediawiki::wiki_name],
-        ],
+        require => MediaWiki::Wiki[$::mediawiki::wiki_name],
     }
 }
diff --git a/puppet/modules/mediawiki/templates/jobchron.systemd.erb 
b/puppet/modules/mediawiki/templates/systemd/jobchron.erb
similarity index 100%
rename from puppet/modules/mediawiki/templates/jobchron.systemd.erb
rename to puppet/modules/mediawiki/templates/systemd/jobchron.erb
diff --git a/puppet/modules/mediawiki/templates/jobrunner.systemd.erb 
b/puppet/modules/mediawiki/templates/systemd/jobrunner.erb
similarity index 100%
rename from puppet/modules/mediawiki/templates/jobrunner.systemd.erb
rename to puppet/modules/mediawiki/templates/systemd/jobrunner.erb
diff --git a/puppet/modules/mediawiki/templates/mediawiki-ready.systemd.erb 
b/puppet/modules/mediawiki/templates/systemd/mediawiki-ready.erb
similarity index 100%
rename from puppet/modules/mediawiki/templates/mediawiki-ready.systemd.erb
rename to puppet/modules/mediawiki/templates/systemd/mediawiki-ready.erb
diff --git a/puppet/modules/sentry/manifests/init.pp 
b/puppet/modules/sentry/manifests/init.pp
index d75e922..283f1f4 100644
--- a/puppet/modules/sentry/manifests/init.pp
+++ b/puppet/modules/sentry/manifests/init.pp
@@ -154,49 +154,31 @@
         ],
     }
 
-    file { '/lib/systemd/system/sentry-server.service':
-        ensure  => present,
-        content => template('sentry/systemd-server.erb'),
-        mode    => '0444',
+    systemd::service { 'sentry-server':
+        ensure         => 'present',
+        service_params => {
+            require   => [
+                Virtualenv::Environment[$deploy_dir],
+                Mysql::User[$db_user],
+            ],
+            subscribe => [
+                File[$cfg_file],
+                Exec['create sentry project'],
+            ],
+        },
     }
 
-    file { '/lib/systemd/system/sentry-worker.service':
-        ensure  => present,
-        content => template('sentry/systemd-worker.erb'),
-        mode    => '0444',
-    }
-
-    exec { 'systemd reload for sentry':
-        refreshonly => true,
-        command     => '/bin/systemctl daemon-reload',
-        subscribe   => File['/lib/systemd/system/sentry-server.service', 
'/lib/systemd/system/sentry-worker.service'],
-    }
-
-    service { 'sentry-server':
-        ensure    => running,
-        enable    => true,
-        provider  => 'systemd',
-        require   => [
-            Virtualenv::Environment[$deploy_dir],
-            Mysql::User[$db_user],
-        ],
-        subscribe => [
-            File[$cfg_file],
-            Exec['create sentry project'],
-        ],
-    }
-
-    service { 'sentry-worker':
-        ensure    => running,
-        enable    => true,
-        provider  => 'systemd',
-        require   => [
-            Virtualenv::Environment[$deploy_dir],
-            Mysql::User[$db_user],
-        ],
-        subscribe => [
-            File[$cfg_file],
-            Exec['create sentry project'],
-        ],
+    systemd::service { 'sentry-worker':
+        ensure         => 'present',
+        service_params => {
+            require   => [
+                Virtualenv::Environment[$deploy_dir],
+                Mysql::User[$db_user],
+            ],
+            subscribe => [
+                File[$cfg_file],
+                Exec['create sentry project'],
+            ],
+        },
     }
 }
diff --git a/puppet/modules/sentry/templates/systemd-server.erb 
b/puppet/modules/sentry/templates/systemd/sentry-server.erb
similarity index 100%
rename from puppet/modules/sentry/templates/systemd-server.erb
rename to puppet/modules/sentry/templates/systemd/sentry-server.erb
diff --git a/puppet/modules/sentry/templates/systemd-worker.erb 
b/puppet/modules/sentry/templates/systemd/sentry-worker.erb
similarity index 100%
rename from puppet/modules/sentry/templates/systemd-worker.erb
rename to puppet/modules/sentry/templates/systemd/sentry-worker.erb
diff --git a/puppet/modules/service/manifests/node.pp 
b/puppet/modules/service/manifests/node.pp
index 186e960..fe6a042 100644
--- a/puppet/modules/service/manifests/node.pp
+++ b/puppet/modules/service/manifests/node.pp
@@ -143,15 +143,6 @@
         mode    => '0444',
     }
 
-    # the systemd config
-    file { "/lib/systemd/system/${title}.service":
-        content => template('service/node/systemd.service.erb'),
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        notify  => Service[$title],
-    }
-
     # schedule the service for git-updates via vagrant git-update
     service::gitupdate { $title:
         type    => 'nodejs',
@@ -160,19 +151,14 @@
     }
 
     # the service definition
-    service { $title:
-        ensure    => running,
-        enable    => true,
-        provider  => 'systemd',
-        require   => [
-            Git::Clone[$title],
-            File["/lib/systemd/system/${title}.service"],
-        ],
-        subscribe => [
-            File["${title}_config_yaml"],
-            Npm::Install[$dir]
-        ]
+    systemd::service { $title:
+        template_name  => 'node',
+        service_params => {
+            subscribe => [
+                File["${title}_config_yaml"],
+                Npm::Install[$dir],
+            ],
+        },
+        require        => Git::Clone[$title],
     }
-
 }
-
diff --git a/puppet/modules/service/templates/node/systemd.service.erb 
b/puppet/modules/service/templates/systemd/node.erb
similarity index 100%
rename from puppet/modules/service/templates/node/systemd.service.erb
rename to puppet/modules/service/templates/systemd/node.erb
diff --git a/puppet/modules/statsd/manifests/init.pp 
b/puppet/modules/statsd/manifests/init.pp
index 812ee56..aa35057 100644
--- a/puppet/modules/statsd/manifests/init.pp
+++ b/puppet/modules/statsd/manifests/init.pp
@@ -45,19 +45,6 @@
         notify  => Service['statsd'],
     }
 
-    file { '/lib/systemd/system/statsd.service':
-        content => template('statsd/systemd.erb'),
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        notify  => Service['statsd'],
-    }
-    exec { 'systemd reload for statsd':
-        refreshonly => true,
-        command     => '/bin/systemctl daemon-reload',
-        subscribe   => File['/lib/systemd/system/statsd.service'],
-    }
-
     file { '/etc/logrotate.d/statsd':
         content => template('statsd/logrotate.erb'),
         owner   => 'root',
@@ -70,10 +57,8 @@
         require => Git::Clone['statsd'],
     }
 
-    service { 'statsd':
-        ensure   => running,
-        enable   => true,
-        provider => 'systemd',
-        require  => Npm::Install[$dir],
+    systemd::service { 'statsd':
+        ensure  => 'present',
+        require => Npm::Install[$dir],
     }
 }
diff --git a/puppet/modules/statsd/templates/systemd.erb 
b/puppet/modules/statsd/templates/systemd/statsd.erb
similarity index 100%
rename from puppet/modules/statsd/templates/systemd.erb
rename to puppet/modules/statsd/templates/systemd/statsd.erb
diff --git a/puppet/modules/systemd/manifests/service.pp 
b/puppet/modules/systemd/manifests/service.pp
new file mode 100644
index 0000000..3270f12
--- /dev/null
+++ b/puppet/modules/systemd/manifests/service.pp
@@ -0,0 +1,95 @@
+# == Define: systemd::service
+#
+# Allows defining a system service (e.g. Apache) and it's corresponding
+# systemd init scripts. Expects a template to be found in
+# "${caller_module_name}/systemd/${template_name}.erb".
+#
+# This is a simplifed version of base::service_unit from Wikimedia's
+# operations/puppet.git Puppet configuration.
+#
+# === Parameters
+# [*ensure*]
+# Whether the systemd unit files should exist and if $declare_service is true
+# whether the corresponding service should be running. Possible values:
+# 'present', 'absent'. Default: 'present'.
+#
+# [*is_override*]
+# Should the systemd unit be used as a site-specific override for a system
+# provided unit or not. Default: false.
+#
+# [*refresh*]
+# Should a change to the configuration file notify the service? Default: true.
+#
+# [*template_name*]
+# Name of the systemd unit template. Default: $name.
+#
+# [*declare_service*]
+# Should a Service resource be defined by this define or not? Default: true.
+#
+# [*service_params*]
+# A hash of parameters to applied to the Service resource. Default: {}
+#
+define systemd::service (
+    $ensure          = 'present',
+    $is_override     = false,
+    $refresh         = true,
+    $template_name   = $name,
+    $declare_service = true,
+    $service_params  = {},
+) {
+    validate_ensure($ensure)
+    $unit_template = "${caller_module_name}/systemd/${template_name}.erb"
+    $unit_path = $is_override ? {
+        true    => 
"/etc/systemd/system/${name}.service.d/puppet-override.conf",
+        default => "/lib/systemd/system/${name}.service",
+    }
+
+    if $is_override {
+        file { "/etc/systemd/system/${name}.service.d":
+            ensure => 'directory',
+            owner  => 'root',
+            group  => 'root',
+            mode   => '0555',
+            before => File[$unit_path],
+        }
+    }
+
+    file { $unit_path:
+        ensure  => $ensure,
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0444',
+        content => template($unit_template),
+    }
+
+    exec { "systemd reload for ${name}":
+        refreshonly => true,
+        command     => '/bin/systemctl daemon-reload',
+        subscribe   => File[$unit_path],
+    }
+
+    if $declare_service {
+        if $refresh {
+            # Notify service of changes to file
+            File[$unit_path] ~> Service[$name]
+        } else {
+            # Ensure that file is applied before the service is called
+            File[$unit_path] -> Service[$name]
+        }
+
+        # Ensure that systemd reloads before the service is called
+        Exec["systemd reload for ${name}"] -> Service[$name]
+
+        $enable = $ensure ? {
+            'present' => true,
+            default   => false,
+        }
+        $base_params = {
+            ensure   => ensure_service($ensure),
+            provider => 'systemd',
+            enable   => $enable,
+        }
+        $params = merge($base_params, $service_params)
+        ensure_resource('service', $name, $params)
+    }
+}
diff --git a/puppet/modules/xvfb/manifests/init.pp 
b/puppet/modules/xvfb/manifests/init.pp
index 1639490..53982da 100644
--- a/puppet/modules/xvfb/manifests/init.pp
+++ b/puppet/modules/xvfb/manifests/init.pp
@@ -39,24 +39,11 @@
         system => true,
     }
 
-    file { '/lib/systemd/system/xvfb.service':
-        content => template('xvfb/xvfb.systemd.erb'),
+    systemd::service { 'xvfb':
+        ensure  => 'present',
         require => [
             Package['xvfb'],
             User['xvfb'],
         ],
-        notify  => Service['xvfb'],
-    }
-    exec { 'systemd reload for xvfb':
-        refreshonly => true,
-        command     => '/bin/systemctl daemon-reload',
-        subscribe   => File['/lib/systemd/system/xvfb.service'],
-        notify      => Service['xvfb'],
-    }
-
-    service { 'xvfb':
-        ensure   => running,
-        enable   => true,
-        provider => 'systemd',
     }
 }
diff --git a/puppet/modules/xvfb/templates/xvfb.systemd.erb 
b/puppet/modules/xvfb/templates/systemd/xvfb.erb
similarity index 100%
rename from puppet/modules/xvfb/templates/xvfb.systemd.erb
rename to puppet/modules/xvfb/templates/systemd/xvfb.erb
diff --git a/puppet/modules/zotero/manifests/init.pp 
b/puppet/modules/zotero/manifests/init.pp
index 0fc2487..6cdecb3 100644
--- a/puppet/modules/zotero/manifests/init.pp
+++ b/puppet/modules/zotero/manifests/init.pp
@@ -58,15 +58,6 @@
         group  => $::share_group,
     }
 
-    file { '/lib/systemd/system/zotero.service':
-        ensure  => present,
-        owner   => 'root',
-        group   => 'root',
-        mode    => '0444',
-        content => template('zotero/systemd.service.erb'),
-        notify  => Service['zotero'],
-    }
-
     service::gitupdate { 'zotero_translation_server':
         dir          => "${base_path}/translation-server",
         restart      => true,
@@ -79,13 +70,7 @@
         service_name => 'zotero',
     }
 
-    service { 'zotero':
-        ensure     => running,
-        enable     => true,
-        hasstatus  => true,
-        hasrestart => true,
-        provider   => 'systemd',
-        require    => File['/lib/systemd/system/zotero.service'],
-        subscribe  => File['/lib/systemd/system/zotero.service'],
+    systemd::service { 'zotero':
+        ensure     => 'present',
     }
 }
diff --git a/puppet/modules/zotero/templates/systemd.service.erb 
b/puppet/modules/zotero/templates/systemd/zotero.erb
similarity index 100%
rename from puppet/modules/zotero/templates/systemd.service.erb
rename to puppet/modules/zotero/templates/systemd/zotero.erb

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I0700550313c5b25b3d73cd08aaacc6b7e0fba794
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: jessie-migration
Gerrit-Owner: BryanDavis <bda...@wikimedia.org>
Gerrit-Reviewer: BryanDavis <bda...@wikimedia.org>
Gerrit-Reviewer: Dduvall <dduv...@wikimedia.org>
Gerrit-Reviewer: Gergő Tisza <gti...@wikimedia.org>
Gerrit-Reviewer: Mobrovac <mobro...@wikimedia.org>
Gerrit-Reviewer: Muehlenhoff <mmuhlenh...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to