--- /dev/null
+# Matches Systemd Service Limit Struct
+type Systemd::ServiceLimits = Struct[
+ {
+ Optional['LimitCPU'] => Pattern['^\d+(s|m|h|d|w|M|y)?(:\d+(s|m|h|d|w|M|y)?)?$'],
+ Optional['LimitFSIZE'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitDATA'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitSTACK'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitCORE'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitRSS'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitNOFILE'] => Variant[Integer[-1],Pattern['^(infinity|\d+(:(infinity|\d+))?)$']],
+ Optional['LimitAS'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitNPROC'] => Integer[1],
+ Optional['LimitMEMLOCK'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitLOCKS'] => Integer[1],
+ Optional['LimitSIGPENDING'] => Integer[1],
+ Optional['LimitMSGQUEUE'] => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+ Optional['LimitNICE'] => Variant[Integer[0,40], Pattern['^(-\+([0-1]?[0-9]|20))|([0-3]?[0-9]|40)$']],
+ Optional['LimitRTPRIO'] => Integer[0],
+ Optional['LimitRTTIME'] => Pattern['^\d+(ms|s|m|h|d|w|M|y)?(:\d+(ms|s|m|h|d|w|M|y)?)?$'],
+ Optional['CPUAccounting'] => Boolean,
+ Optional['CPUShares'] => Integer[2,262144],
+ Optional['StartupCPUShares'] => Integer[2,262144],
+ Optional['CPUQuota'] => Pattern['^([1-9][0-9]?$|^100)%$'],
+ Optional['MemoryAccounting'] => Boolean,
+ Optional['MemoryLow'] => Pattern['^(\d+(K|M|G|T)?)$'],
+ Optional['MemoryHigh'] => Pattern['^(\d+(K|M|G|T)?)$'],
+ Optional['MemoryMax'] => Pattern['^(\d+(K|M|G|T)?)$'],
+ Optional['MemoryLimit'] => Pattern['^(\d+(K|M|G|T)?)$'],
+ Optional['TasksAccounting'] => Boolean,
+ Optional['TasksMax'] => Variant[Integer[1],Pattern['^(infinity|([1-9][0-9]?$|^100)%)$']],
+ Optional['IOAccounting'] => Boolean,
+ Optional['IOWeight'] => Integer[1,10000],
+ Optional['StartupIOWeight'] => Integer[1,10000],
+ Optional['IODeviceWeight'] => Array[Hash[Stdlib::Absolutepath, Integer[1,10000], 1, 1]],
+ Optional['IOReadBandwidthMax'] => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+ Optional['IOWriteBandwidthMax'] => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+ Optional['IOReadIOPSMax'] => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+ Optional['IOWriteIOPSMax'] => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+ Optional['DeviceAllow'] => String[1],
+ Optional['DevicePolicy'] => Enum['auto','closed','strict'],
+ Optional['Slice'] => String[1],
+ Optional['Delegate'] => Boolean
+ }
+]