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