Skip to content

Commit aa86203

Browse files
authored
Merge pull request #616 from jcpunk/unit-features
Sync up service options list with upstream
2 parents cf147e4 + 7653123 commit aa86203

7 files changed

Lines changed: 911 additions & 173 deletions

File tree

REFERENCE.md

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5990,10 +5990,12 @@ Alias of
59905990

59915991
```puppet
59925992
Struct[{
5993-
Optional['Alias'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5994-
Optional['WantedBy'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5995-
Optional['RequiredBy'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5996-
Optional['Also'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5993+
Optional['Alias'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5994+
Optional['WantedBy'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5995+
Optional['RequiredBy'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5996+
Optional['UpheldBy'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5997+
Optional['Also'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
5998+
Optional['DefaultInstance'] => String[1],
59975999
}]
59986000
```
59996001

@@ -6087,7 +6089,7 @@ Alias of
60876089
```puppet
60886090
Struct[{
60896091
# Options from systemd.service
6090-
Optional['Type'] => Enum['simple', 'exec', 'forking', 'oneshot', 'dbus', 'notify', 'idle'],
6092+
Optional['Type'] => Enum['simple', 'exec', 'forking', 'oneshot', 'dbus', 'notify', 'notify-reload', 'idle'],
60916093
Optional['ExitType'] => Enum['main', 'cgroup'],
60926094
Optional['RemainAfterExit'] => Boolean,
60936095
Optional['GuessMainPID'] => Boolean,
@@ -6098,6 +6100,7 @@ Struct[{
60986100
Optional['ExecStartPost'] => Variant[Systemd::Unit::Service::Exec,Array[Systemd::Unit::Service::Exec,1]],
60996101
Optional['ExecCondition'] => Variant[Systemd::Unit::Service::Exec,Array[Systemd::Unit::Service::Exec,1]],
61006102
Optional['ExecReload'] => Variant[Systemd::Unit::Service::Exec,Array[Systemd::Unit::Service::Exec,1]],
6103+
Optional['ExecReloadPost'] => Variant[Systemd::Unit::Service::Exec,Array[Systemd::Unit::Service::Exec,1]],
61016104
Optional['ExecStop'] => Variant[Systemd::Unit::Service::Exec,Array[Systemd::Unit::Service::Exec,1]],
61026105
Optional['ExecStopPost'] => Variant[Systemd::Unit::Service::Exec,Array[Systemd::Unit::Service::Exec,1]],
61036106
Optional['KillSignal'] => Pattern[/^SIG[A-Z]+$/],
@@ -6138,13 +6141,24 @@ Struct[{
61386141
Optional['RuntimeRandomizedExtraSec'] => Variant[Integer[0],String],
61396142
Optional['WatchdogSec'] => Variant[Integer[0],String],
61406143
Optional['Restart'] => Enum['no', 'on-success', 'on-failure', 'on-abnormal', 'on-watchdog', 'on-abort', 'always'],
6144+
Optional['RestartMaxDelaySec'] => Variant[Integer[0],String],
6145+
Optional['RestartMode'] => Enum['normal', 'direct', 'debug'],
6146+
Optional['RestartSteps'] => Integer[0],
61416147
Optional['SuccessExitStatus'] => String,
61426148
Optional['RestartPreventExitStatus'] => String,
61436149
Optional['RestartForceExitStatus'] => String,
6144-
Optional['RootDirectoryStartOnly'] => Boolean,
6150+
Optional['FileDescriptorStoreMax'] => Integer[0],
6151+
Optional['FileDescriptorStorePreserve'] => Enum['no', 'yes', 'restart'],
61456152
Optional['NonBlocking'] => Boolean,
6146-
Optional['NotifyAccess'] => Enum['none', 'default', 'main', 'exec', 'all'],
6147-
Optional['OOMPolicy'] => Enum['continue', 'stop','kill'],
6153+
Optional['NotifyAccess'] => Enum['none', 'default', 'main', 'exec', 'all'],
6154+
Optional['OOMPolicy'] => Enum['continue', 'stop', 'kill'],
6155+
Optional['OpenFile'] => Variant[String[1],Array[String[1],1]],
6156+
Optional['RefreshOnReload'] => Variant[Boolean,Array[Enum['extensions','credentials'],1]],
6157+
Optional['ReloadSignal'] => Pattern[/^SIG[A-Z0-9]+$/],
6158+
Optional['RootDirectoryStartOnly'] => Boolean,
6159+
Optional['Sockets'] => Variant[String[1],Array[String[1],1]],
6160+
Optional['USBFunctionDescriptors'] => Stdlib::Unixpath,
6161+
Optional['USBFunctionStrings'] => Stdlib::Unixpath,
61486162
# Options from systemd.exec
61496163
Optional['WorkingDirectory'] => String[0],
61506164
Optional['RootDirectory'] => Stdlib::Unixpath,
@@ -6459,6 +6473,7 @@ Struct[{
64596473
Optional['StopPropagatedFrom'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
64606474
Optional['JoinsNamespaceOf'] => Variant[Enum[''],Systemd::Unit,Array[Variant[Enum[''],Systemd::Unit],1]],
64616475
Optional['RequiresMountsFor'] => Variant[Enum[''],Stdlib::Unixpath,Array[Variant[Enum[''],Stdlib::Unixpath],1]],
6476+
Optional['WantsMountsFor'] => Variant[Enum[''],Stdlib::Unixpath,Array[Variant[Enum[''],Stdlib::Unixpath],1]],
64626477
Optional['OnSuccessJobMode'] => Enum['fail', 'replace', 'replace-irreversibly', 'isolate', 'flush', 'ignore-dependencies', 'ignore-requirements'],
64636478
Optional['OnFailureJobMode'] => Enum['fail', 'replace', 'replace-irreversibly', 'isolate', 'flush', 'ignore-dependencies', 'ignore-requirements'],
64646479
Optional['IgnoreOnIsolate'] => Boolean,
@@ -6489,6 +6504,16 @@ Struct[{
64896504
Optional['AssertNeedsUpdate'] => Variant[String,Array[String,1]],
64906505
Optional['AssertFirstBoot'] => Boolean,
64916506
Optional['AssertKernelModuleLoaded'] => Variant[String,Array[String,1]],
6507+
Optional['AssertUser'] => Variant[String,Array[String,1]],
6508+
Optional['AssertGroup'] => Variant[String,Array[String,1]],
6509+
Optional['AssertControlGroupController'] => Variant[String,Array[String,1]],
6510+
Optional['AssertMemory'] => Variant[String,Array[String,1]],
6511+
Optional['AssertCPUs'] => Variant[String,Array[String,1]],
6512+
Optional['AssertCPUFeature'] => Variant[String,Array[String,1]],
6513+
Optional['AssertOSRelease'] => Variant[String,Array[String,1]],
6514+
Optional['AssertMemoryPressure'] => Variant[String,Array[String,1]],
6515+
Optional['AssertCPUPressure'] => Variant[String,Array[String,1]],
6516+
Optional['AssertIOPressure'] => Variant[String,Array[String,1]],
64926517
Optional['AssertPathExists'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
64936518
Optional['AssertPathExistsGlob'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
64946519
Optional['AssertPathIsDirectory'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
@@ -6515,6 +6540,16 @@ Struct[{
65156540
Optional['ConditionNeedsUpdate'] => Variant[String,Array[String,1]],
65166541
Optional['ConditionFirstBoot'] => Boolean,
65176542
Optional['ConditionKernelModuleLoaded'] => Variant[String,Array[String,1]],
6543+
Optional['ConditionUser'] => Variant[String,Array[String,1]],
6544+
Optional['ConditionGroup'] => Variant[String,Array[String,1]],
6545+
Optional['ConditionControlGroupController'] => Variant[String,Array[String,1]],
6546+
Optional['ConditionMemory'] => Variant[String,Array[String,1]],
6547+
Optional['ConditionCPUs'] => Variant[String,Array[String,1]],
6548+
Optional['ConditionCPUFeature'] => Variant[String,Array[String,1]],
6549+
Optional['ConditionOSRelease'] => Variant[String,Array[String,1]],
6550+
Optional['ConditionMemoryPressure'] => Variant[String,Array[String,1]],
6551+
Optional['ConditionCPUPressure'] => Variant[String,Array[String,1]],
6552+
Optional['ConditionIOPressure'] => Variant[String,Array[String,1]],
65186553
Optional['ConditionPathExists'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
65196554
Optional['ConditionPathExistsGlob'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
65206555
Optional['ConditionPathIsDirectory'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
@@ -6528,6 +6563,13 @@ Struct[{
65286563
Optional['ConditionFileIsExecutable'] => Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/],Array[Variant[Enum[''],Stdlib::Unixpath,Pattern[/^!.*$/]],1]],
65296564
Optional['StartLimitIntervalSec'] => String[1],
65306565
Optional['StartLimitBurst'] => Integer[1],
6566+
Optional['StartLimitAction'] => Enum['none','reboot','reboot-force','reboot-immediate','poweroff','poweroff-force','poweroff-immediate','exit','exit-force','soft-reboot','soft-reboot-force','kexec','kexec-force','halt','halt-force','halt-immediate'],
6567+
Optional['RebootArgument'] => String,
6568+
Optional['SourcePath'] => Stdlib::Unixpath,
6569+
Optional['JobTimeoutSec'] => Variant[Integer[0],String],
6570+
Optional['JobRunningTimeoutSec'] => Variant[Integer[0],String],
6571+
Optional['JobTimeoutAction'] => Enum['none','reboot','reboot-force','reboot-immediate','poweroff','poweroff-force','poweroff-immediate','exit','exit-force','soft-reboot','soft-reboot-force','kexec','kexec-force','halt','halt-force','halt-immediate'],
6572+
Optional['JobTimeoutRebootArgument'] => String,
65316573
}]
65326574
```
65336575

spec/type_aliases/systemd_unit_install_spec.rb

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,54 @@
22

33
require 'spec_helper'
44

5+
# =============================================================================
6+
# Shared value fixtures
7+
# =============================================================================
8+
9+
# Variant[Enum[''], Systemd::Unit, Array[Variant[Enum[''], Systemd::Unit], 1]]
10+
# Empty-string reset, a valid unit name, or a non-empty array of those.
11+
INSTALL_UNIT_VALID = [
12+
'foobar.service',
13+
['foobar.service'],
14+
%w[alpha.service beta.service],
15+
'',
16+
[''],
17+
['', 'foobar.service'],
18+
].freeze
19+
INSTALL_UNIT_INVALID = [
20+
'noextension', # must have a unit-type suffix
21+
['noextension'],
22+
'/foo.service', # leading slash not permitted
23+
[], # empty array not permitted
24+
].freeze
25+
26+
# Keys that take a unit name (or list of unit names).
27+
INSTALL_UNIT_KEYS = %w[Alias WantedBy RequiredBy UpheldBy Also].freeze
28+
529
describe 'Systemd::Unit::Install' do
6-
%w[Alias WantedBy RequiredBy Also].each do |depend|
7-
context "with a key of #{depend} can have values of units" do
8-
it { is_expected.to allow_value({ depend.to_s => 'foobar.service' }) }
9-
it { is_expected.to allow_value({ depend.to_s => ['foobar.service'] }) }
10-
it { is_expected.to allow_value({ depend.to_s => ['alpha.service', 'beta.service'] }) }
11-
it { is_expected.to allow_value({ depend.to_s => '' }) }
12-
it { is_expected.to allow_value({ depend.to_s => [''] }) }
13-
it { is_expected.to allow_value({ depend.to_s => ['', 'foobar.service'] }) }
30+
# ---------------------------------------------------------------------------
31+
# Unit-name keys
32+
# Variant[Enum[''], Systemd::Unit, Array[Variant[Enum[''], Systemd::Unit], 1]]
33+
# ---------------------------------------------------------------------------
34+
35+
INSTALL_UNIT_KEYS.each do |key|
36+
context key do
37+
INSTALL_UNIT_VALID.each { |v| it { is_expected.to allow_value({ key => v }) } }
38+
INSTALL_UNIT_INVALID.each { |v| it { is_expected.not_to allow_value({ key => v }) } }
1439
end
1540
end
1641

17-
it { is_expected.not_to allow_value({ 'Also' => 'noextension' }) }
18-
it { is_expected.not_to allow_value({ 'Also' => ['noextension'] }) }
42+
# ---------------------------------------------------------------------------
43+
# DefaultInstance
44+
# String[1] - non-empty string usable as a template instance identifier.
45+
# ---------------------------------------------------------------------------
46+
47+
context 'DefaultInstance' do
48+
it { is_expected.to allow_value({ 'DefaultInstance' => '1' }) }
49+
it { is_expected.to allow_value({ 'DefaultInstance' => 'primary' }) }
50+
it { is_expected.to allow_value({ 'DefaultInstance' => 'eth0' }) }
51+
it { is_expected.not_to allow_value({ 'DefaultInstance' => '' }) }
52+
it { is_expected.not_to allow_value({ 'DefaultInstance' => 42 }) }
53+
it { is_expected.not_to allow_value({ 'DefaultInstance' => [] }) }
54+
end
1955
end

0 commit comments

Comments
 (0)