Skip to content

Commit d46b89e

Browse files
committed
Support systemd on the debian family
Most systemd systems allow using a sysconfig style environments file, but not debian. If we do not want to adjust daemon options, we need to use an systemd drop-in service file.
1 parent 838d825 commit d46b89e

File tree

6 files changed

+83
-4
lines changed

6 files changed

+83
-4
lines changed

.fixtures.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
fixtures:
22
repositories:
33
stdlib: 'https://github.com/puppetlabs/puppetlabs-stdlib.git'
4+
systemd: 'https://github.com/camptocamp/puppet-systemd.git'

manifests/init.pp

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,10 @@
355355
$trap_service_hasrestart = $snmp::params::trap_service_hasrestart,
356356
String[1] $template_snmpd_conf = $snmp::params::template_snmpd_conf,
357357
String[1] $template_snmpd_sysconfig = $snmp::params::template_snmpd_sysconfig,
358+
String[1] $template_snmpd_systemd_override = $snmp::params::template_snmpd_systemd_override,
358359
String[1] $template_snmptrapd = $snmp::params::template_snmptrapd,
359360
String[1] $template_snmptrapd_sysconfig = $snmp::params::template_snmptrapd_sysconfig,
361+
String[1] $template_snmptrapd_systemd_override = $snmp::params::template_snmptrapd_systemd_override,
360362
Boolean $openmanage_enable = $snmp::params::openmanage_enable,
361363
Boolean $master = $snmp::params::master,
362364
$agentx_perms = $snmp::params::agentx_perms,
@@ -439,6 +441,43 @@
439441
}
440442
}
441443

444+
if $facts['os']['family'] == 'Debian' and $facts['service_provider'] == 'systemd' {
445+
include 'systemd::systemctl::daemon_reload'
446+
file {[
447+
'/etc/systemd/system/snmpd.service.d',
448+
'/etc/systemd/system/snmptrapd.service.d/',
449+
]:
450+
ensure => 'directory',
451+
owner => 'root',
452+
group => 'root',
453+
mode => '0755',
454+
}
455+
file {'/etc/systemd/system/snmpd.service.d/local.conf':
456+
ensure => 'file',
457+
owner => 'root',
458+
group => 'root',
459+
mode => '0644',
460+
content => template($template_snmpd_systemd_override),
461+
require => Package['snmpd'],
462+
notify => [
463+
Exec['systemctl-daemon-reload'],
464+
Service['snmpd'],
465+
],
466+
}
467+
file {'/etc/systemd/system/snmptrapd.service.d/local.conf':
468+
ensure => 'file',
469+
owner => 'root',
470+
group => 'root',
471+
mode => '0644',
472+
content => template($template_snmptrapd_systemd_override),
473+
require => Package['snmptrapd'],
474+
notify => [
475+
Exec['systemctl-daemon-reload'],
476+
Service['snmptrapd'],
477+
],
478+
}
479+
}
480+
442481
# Config
443482
file { 'snmpd.conf':
444483
ensure => $file_ensure,
@@ -501,14 +540,22 @@
501540
}
502541
}
503542

543+
# If options change on debian with systemd, we need to reload the systemd daemon
544+
# before restarting the service.
545+
if $facts['os']['family'] == 'Debian' and $facts['service_provider'] == 'systemd' {
546+
$service_requires = [File['var-net-snmp'], Exec['systemctl-daemon-reload']]
547+
} else {
548+
$service_requires = File['var-net-snmp']
549+
}
550+
504551
# Services
505552
service { 'snmptrapd':
506553
ensure => $trap_service_ensure_real,
507554
name => $trap_service_name,
508555
enable => $trap_service_enable_real,
509556
hasstatus => $trap_service_hasstatus,
510557
hasrestart => $trap_service_hasrestart,
511-
require => File['var-net-snmp'],
558+
require => $service_requires,
512559
subscribe => File['snmptrapd.conf'],
513560
}
514561

@@ -518,7 +565,7 @@
518565
enable => $service_enable_real,
519566
hasstatus => $service_hasstatus,
520567
hasrestart => $service_hasrestart,
521-
require => File['var-net-snmp'],
568+
require => $service_requires,
522569
subscribe => File['snmpd.conf'],
523570
}
524571

manifests/params.pp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@
7575
$snmpv2_enable = true
7676
$template_snmpd_conf = 'snmp/snmpd.conf.erb'
7777
$template_snmpd_sysconfig = "snmp/snmpd.sysconfig-${facts['os']['family']}.erb"
78+
$template_snmpd_systemd_override = 'snmp/snmpd.systemd_override.erb'
7879
$template_snmptrapd = 'snmp/snmptrapd.conf.erb'
7980
$template_snmptrapd_sysconfig = "snmp/snmptrapd.sysconfig-${facts['os']['family']}.erb"
81+
$template_snmptrapd_systemd_override = 'snmp/snmptrapd.systemd_override.erb'
8082

8183
$majordistrelease = $facts['os']['release']['major']
8284

@@ -146,8 +148,13 @@
146148
$varnetsnmp_group = 'snmp'
147149
}
148150

149-
$sysconfig = '/etc/default/snmpd'
150-
$trap_sysconfig = '/etc/default/snmptrapd'
151+
if $::facts['service_provider'] == 'systemd' {
152+
$sysconfig = undef
153+
$trap_sysconfig = undef
154+
} else {
155+
$sysconfig = '/etc/default/snmpd'
156+
$trap_sysconfig = '/etc/default/snmptrapd'
157+
}
151158

152159
$package_name = 'snmpd'
153160
$snmptrapd_package_name = 'snmptrapd'

metadata.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
"source": "https://github.com/voxpupuli/puppet-snmp.git",
1010
"tags": [ "snmp", "net-snmp", "monitoring" ],
1111
"dependencies": [
12+
{
13+
"name": "camptocamp/systemd",
14+
"version_requirement": ">= 1.0.0 < 3.0.0"
15+
},
1216
{
1317
"name": "puppetlabs/stdlib",
1418
"version_requirement": ">= 4.13.1 < 6.0.0"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[Service]
2+
ExecStart=
3+
ExecStart=/usr/sbin/snmpd <%= @snmpd_options %>
4+
<% if @snmpd_options.split(' ').include?('-f') -%>
5+
Type=
6+
Type=simple
7+
<% else -%>
8+
Type=
9+
Type=forking
10+
<% end -%>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[Service]
2+
ExecStart=
3+
ExecStart=/usr/sbin/snmptrapd <%= @snmptrapd_options %>
4+
<% if @snmptrapd_options.split(' ').include?('-f') -%>
5+
Type=
6+
Type=simple
7+
<% else -%>
8+
Type=
9+
Type=forking
10+
<% end -%>

0 commit comments

Comments
 (0)