Skip to content

Commit 214e126

Browse files
Yury Bushmelevjay7x
Yury Bushmelev
authored andcommitted
Manage {system,user}.conf
1 parent 96719a0 commit 214e126

9 files changed

+166
-19
lines changed

manifests/init.pp

+22-2
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,22 @@
219219
#
220220
# @param udev_purge_rules
221221
# Toggle if unmanaged files in /etc/udev/rules.d should be purged if manage_udevd is enabled
222+
#
223+
# @param manage_system_conf
224+
# Should system service manager configurations be managed
225+
#
226+
# @param system_settings
227+
# Config Hash that is used to configure settings in system.conf
228+
# NOTE: It's currently impossible to have multiple entries of the same key in
229+
# the settings.
230+
#
231+
# @param manage_user_conf
232+
# Should user service manager configurations be managed
233+
#
234+
# @param user_settings
235+
# Config Hash that is used to configure settings in user.conf
236+
# NOTE: It's currently impossible to have multiple entries of the same key in
237+
# the settings.
222238
class systemd (
223239
Optional[Pattern['^.+\.target$']] $default_target = undef,
224240
Hash[String,String] $accounting = {},
@@ -284,6 +300,10 @@
284300
Enum['stopped','running'] $oomd_ensure = 'running',
285301
Systemd::OomdSettings $oomd_settings = {},
286302
Boolean $udev_purge_rules = false,
303+
Boolean $manage_system_conf = true,
304+
Systemd::SystemSettings $system_settings = {},
305+
Boolean $manage_user_conf = true,
306+
Systemd::SystemSettings $user_settings = {},
287307
) {
288308
contain systemd::install
289309

@@ -347,8 +367,8 @@
347367
contain systemd::udevd
348368
}
349369

350-
if $manage_accounting {
351-
contain systemd::system
370+
if $manage_accounting or $manage_system_conf or $manage_user_conf {
371+
contain systemd::service_manager
352372
}
353373

354374
unless empty($machine_info_settings) {

manifests/service_manager.pp

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# @api private
2+
#
3+
# This class provides a solution to manage system and/or user service manager settings.
4+
# @see https://www.freedesktop.org/software/systemd/man/latest/systemd-system.conf.html
5+
#
6+
# @param manage_system_conf
7+
# Should system service manager configurations be managed
8+
#
9+
# @param system_settings
10+
# Config Hash that is used to configure settings in system.conf
11+
# NOTE: It's currently impossible to have multiple entries of the same key in
12+
# the settings.
13+
#
14+
# @param manage_user_conf
15+
# Should user service manager configurations be managed
16+
#
17+
# @param user_settings
18+
# Config Hash that is used to configure settings in user.conf
19+
# NOTE: It's currently impossible to have multiple entries of the same key in
20+
# the settings.
21+
#
22+
class systemd::service_manager (
23+
Boolean $manage_system_conf = $systemd::manage_system_conf,
24+
Boolean $manage_user_conf = $systemd::manage_user_conf,
25+
Systemd::ServiceManagerSettings $system_settings = $systemd::system_settings + $systemd::accounting,
26+
Systemd::ServiceManagerSettings $user_settings = $systemd::user_settings,
27+
) {
28+
assert_private()
29+
30+
if $manage_system_conf {
31+
$system_settings.each |$option, $value| {
32+
ini_setting { "system/${option}":
33+
ensure => 'present',
34+
path => '/etc/systemd/system.conf',
35+
section => 'Manager',
36+
setting => $option,
37+
value => $value,
38+
}
39+
}
40+
}
41+
42+
if $manage_user_conf {
43+
$user_settings.each |$option, $value| {
44+
ini_setting { "user/${option}":
45+
ensure => 'present',
46+
path => '/etc/systemd/user.conf',
47+
section => 'Manager',
48+
setting => $option,
49+
value => $value,
50+
}
51+
}
52+
}
53+
}

manifests/system.pp

-17
This file was deleted.

types/capabilities.pp

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# @summary Defines allowed capabilities
2+
type Systemd::Capabilities = Variant[Pattern[/^~?(CAP_[A-Z_]+ *)+$/]]

types/loglevel.pp

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# @summary Defines allowed log levels
2+
type Systemd::LogLevel = Variant[Enum['emerg','alert','crit','err','warning','notice','info','debug'], Integer[0,7]]

types/output.pp

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# @summary Defines allowed output values
2+
# Used in DefaultStandardOutput/DefaultStandardError e.g.
3+
type Systemd::Output = Enum['inherit', 'null', 'tty', 'journal', 'journal+console', 'kmsg', 'kmsg+console']

types/servicemanagersettings.pp

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# @summary Matches Systemd system.conf/user.conf settings
2+
# @see https://www.freedesktop.org/software/systemd/man/latest/systemd-system.conf.html
3+
type Systemd::ServiceManagerSettings = Struct[
4+
# lint:ignore:140chars
5+
{
6+
Optional['LogLevel'] => Variant[Systemd::LogLevel, Systemd::SettingEnsure],
7+
Optional['LogTarget'] => Variant[Enum['console','console-prefixed','kmsg','journal','journal-or-kmsg','auto','null'], Systemd::SettingEnsure],
8+
Optional['LogColor'] => Variant[Boolean, Systemd::SettingEnsure],
9+
Optional['LogLocation'] => Variant[Boolean, Systemd::SettingEnsure],
10+
Optional['LogTime'] => Variant[Boolean, Systemd::SettingEnsure],
11+
Optional['DumpCore'] => Variant[Boolean, Systemd::SettingEnsure],
12+
Optional['ShowStatus'] => Variant[Boolean, Enum['auto','error'], Systemd::SettingEnsure],
13+
Optional['CrashChangeVT'] => Variant[Boolean, Integer[1,63], Systemd::SettingEnsure],
14+
Optional['CrashShell'] => Variant[Boolean, Systemd::SettingEnsure],
15+
Optional['CrashReboot'] => Variant[Boolean, Systemd::SettingEnsure], # Obsoleted by CrashAction in v256, delete after Debian 12 EOL
16+
Optional['CrashAction'] => Variant[Enum['freeze', 'reboot', 'poweroff'], Systemd::SettingEnsure],
17+
Optional['CtrlAltDelBurstAction'] => Variant[Enum['reboot-force','poweroff-force','reboot-immediate','poweroff-immediate','none'], Systemd::SettingEnsure],
18+
Optional['CPUAffinity'] => Variant[Enum['numa'], Pattern['^[0-9, -]+$'], Systemd::SettingEnsure],
19+
Optional['NUMAPolicy'] => Variant[Enum['default','preferred','bind','interleave','local'], Systemd::SettingEnsure],
20+
Optional['NUMAMask'] => Variant[Enum['all'], Pattern['^[0-9, -]+$'], Systemd::SettingEnsure],
21+
Optional['RuntimeWatchdogSec'] => Variant[Enum['off','default'], Systemd::Timespan, Systemd::SettingEnsure],
22+
Optional['RuntimeWatchdogPreSec'] => Variant[Enum['off'], Systemd::Timespan, Systemd::SettingEnsure],
23+
Optional['RuntimeWatchdogPreGovernor'] => Variant[Enum['noop', 'panic'], String[1], Systemd::SettingEnsure],
24+
Optional['RebootWatchdogSec'] => Variant[Enum['off','default'], Systemd::Timespan, Systemd::SettingEnsure],
25+
Optional['KExecWatchdogSec'] => Variant[Enum['off','default'], Systemd::Timespan, Systemd::SettingEnsure],
26+
Optional['WatchdogDevice'] => Variant[Stdlib::Absolutepath, Systemd::SettingEnsure],
27+
Optional['CapabilityBoundingSet'] => Variant[Systemd::Capabilities, Systemd::SettingEnsure],
28+
Optional['NoNewPrivileges'] => Variant[Boolean, Systemd::SettingEnsure],
29+
Optional['ProtectSystem'] => Variant[Enum['auto'], Boolean, Systemd::SettingEnsure],
30+
Optional['SystemCallArchitectures'] => Variant[String[1], Systemd::SettingEnsure],
31+
Optional['TimerSlackNSec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
32+
Optional['StatusUnitFormat'] => Variant[Enum['combined','description','name'], Systemd::SettingEnsure],
33+
Optional['DefaultTimerAccuracySec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
34+
Optional['DefaultStandardOutput'] => Variant[Systemd::Output, Systemd::SettingEnsure],
35+
Optional['DefaultStandardError'] => Variant[Systemd::Output, Systemd::SettingEnsure],
36+
Optional['DefaultTimeoutStartSec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
37+
Optional['DefaultTimeoutStopSec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
38+
Optional['DefaultTimeoutAbortSec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
39+
Optional['DefaultDeviceTimeoutSec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
40+
Optional['DefaultRestartSec'] => Variant[Systemd::Timespan, Systemd::SettingEnsure],
41+
Optional['DefaultStartLimitIntervalSec'] => Variant[Enum['infinity'], Systemd::Timespan, Systemd::SettingEnsure],
42+
Optional['DefaultStartLimitBurst'] => Variant[Integer[0], Systemd::SettingEnsure],
43+
Optional['DefaultEnvironment'] => Variant[String, Systemd::SettingEnsure],
44+
Optional['ManagerEnvironment'] => Variant[String, Systemd::SettingEnsure],
45+
Optional['DefaultCPUAccounting'] => Variant[Boolean, Systemd::SettingEnsure],
46+
Optional['DefaultBlockIOAccounting'] => Variant[Boolean, Systemd::SettingEnsure], # Deprecated in v252. Delete after Debian 11 EOL
47+
Optional['DefaultIOAccounting'] => Variant[Boolean, Systemd::SettingEnsure],
48+
Optional['DefaultIPAccounting'] => Variant[Boolean, Systemd::SettingEnsure],
49+
Optional['DefaultMemoryAccounting'] => Variant[Boolean, Systemd::SettingEnsure],
50+
Optional['DefaultTasksAccounting'] => Variant[Boolean, Systemd::SettingEnsure],
51+
Optional['DefaultTasksMax'] => Variant[Enum[infinity], Integer[0], Systemd::Unit::Percent, Systemd::SettingEnsure],
52+
Optional['DefaultLimitCPU'] => Variant[Pattern['^\d+(s|m|h|d|w|M|y)?(:\d+(s|m|h|d|w|M|y)?)?$'], Systemd::SettingEnsure],
53+
Optional['DefaultLimitFSIZE'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
54+
Optional['DefaultLimitDATA'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
55+
Optional['DefaultLimitSTACK'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
56+
Optional['DefaultLimitCORE'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
57+
Optional['DefaultLimitRSS'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
58+
Optional['DefaultLimitNOFILE'] => Variant[Integer[-1], Pattern['^(infinity|\d+(:(infinity|\d+))?)$'], Systemd::SettingEnsure],
59+
Optional['DefaultLimitAS'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
60+
Optional['DefaultLimitNPROC'] => Variant[Integer[-1],Pattern['^(infinity|\d+(:(infinity|\d+))?)$'], Systemd::SettingEnsure],
61+
Optional['DefaultLimitMEMLOCK'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
62+
Optional['DefaultLimitLOCKS'] => Variant[Integer[1], Systemd::SettingEnsure],
63+
Optional['DefaultLimitSIGPENDING'] => Variant[Integer[1], Systemd::SettingEnsure],
64+
Optional['DefaultLimitMSGQUEUE'] => Variant[Pattern['^(infinity|((\d+(K|M|G|T|P|E)?(:\d+(K|M|G|T|P|E)?)?)))$'], Systemd::SettingEnsure],
65+
Optional['DefaultLimitNICE'] => Variant[Integer[0,40], Pattern['^(-\+([0-1]?[0-9]|20))|([0-3]?[0-9]|40)$'], Systemd::SettingEnsure],
66+
Optional['DefaultLimitRTPRIO'] => Variant[Integer[0], Systemd::SettingEnsure],
67+
Optional['DefaultLimitRTTIME'] => Variant[Pattern['^\d+(ms|s|m|h|d|w|M|y)?(:\d+(ms|s|m|h|d|w|M|y)?)?$'], Systemd::SettingEnsure],
68+
Optional['DefaultOOMPolicy'] => Variant[Enum['continue', 'stop','kill'], Systemd::SettingEnsure],
69+
Optional['DefaultSmackProcessLabel'] => Variant[String, Systemd::SettingEnsure],
70+
Optional['ReloadLimitIntervalSec'] => Variant[Enum['infinity'], Systemd::Timespan, Systemd::SettingEnsure],
71+
Optional['ReloadLimitBurst'] => Variant[Integer[0], Systemd::SettingEnsure],
72+
Optional['DefaultMemoryPressureWatch'] => Variant[Systemd::SettingEnsure],
73+
Optional['DefaultMemoryPressureThresholdSec'] => Variant[Systemd::SettingEnsure],
74+
}
75+
# lint:endignore
76+
]

types/settingensure.pp

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# @summary Defines allowed ensure states for an ini_setting
2+
type Systemd::SettingEnsure = Struct[{ 'ensure' => Enum['present','absent'] }]

types/timespan.pp

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# @summary Defines a timespan type
2+
# @see https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html
3+
type Systemd::Timespan = Variant[
4+
Integer[0],
5+
Pattern[/^([0-9]+ *(usec|us|msec|ms|second[s]?|sec|s|minute[s]?|min|m|hour[s]?|hr|h|day[s]?|d|week[s]?|w|month[s]?|M|year[s]?|y)? *)+$/]
6+
]

0 commit comments

Comments
 (0)