quadlet: add key CgroupsMode

Signed-off-by: Misaki Kasumi <misakikasumi@outlook.com>
This commit is contained in:
Misaki Kasumi
2024-08-20 10:07:07 +08:00
parent 426aac362e
commit 1ccccde183
4 changed files with 25 additions and 1 deletions

View File

@ -259,6 +259,7 @@ Valid options for `[Container]` are listed below:
| AddDevice=/dev/foo | --device /dev/foo | | AddDevice=/dev/foo | --device /dev/foo |
| Annotation="XYZ" | --annotation "XYZ" | | Annotation="XYZ" | --annotation "XYZ" |
| AutoUpdate=registry | --label "io.containers.autoupdate=registry" | | AutoUpdate=registry | --label "io.containers.autoupdate=registry" |
| CgroupsMode=no-conmon | --cgroups=no-conmon |
| ContainerName=name | --name name | | ContainerName=name | --name name |
| ContainersConfModule=/etc/nvd\.conf | --module=/etc/nvd\.conf | | ContainersConfModule=/etc/nvd\.conf | --module=/etc/nvd\.conf |
| DNS=192.168.55.1 | --dns=192.168.55.1 | | DNS=192.168.55.1 | --dns=192.168.55.1 |
@ -370,6 +371,16 @@ Indicates whether the container will be auto-updated ([podman-auto-update(1)](po
* `local`: Tells Podman to compare the image a container is using to the image with its raw name in local storage. If an image is updated locally, Podman simply restarts the systemd unit executing the container. * `local`: Tells Podman to compare the image a container is using to the image with its raw name in local storage. If an image is updated locally, Podman simply restarts the systemd unit executing the container.
### `CgroupsMode=`
The cgroups mode of the Podman container. Equivalent to the Podman `--cgroups` option.
By default, the cgroups mode of the container created by Quadlet is `split`,
which differs from the default (`enabled`) used by the Podman CLI.
If the container joins a pod (i.e. `Pod=` is specified), you may want to change this to
`no-conmon` or `enabled` so that pod level cgroup resource limits can take effect.
### `ContainerName=` ### `ContainerName=`
The (optional) name of the Podman container. If this is not specified, the default value The (optional) name of the Podman container. If this is not specified, the default value

View File

@ -62,6 +62,7 @@ const (
KeyAuthFile = "AuthFile" KeyAuthFile = "AuthFile"
KeyAutoUpdate = "AutoUpdate" KeyAutoUpdate = "AutoUpdate"
KeyCertDir = "CertDir" KeyCertDir = "CertDir"
KeyCgroupsMode = "CgroupsMode"
KeyConfigMap = "ConfigMap" KeyConfigMap = "ConfigMap"
KeyContainerName = "ContainerName" KeyContainerName = "ContainerName"
KeyContainersConfModule = "ContainersConfModule" KeyContainersConfModule = "ContainersConfModule"
@ -191,6 +192,7 @@ var (
KeyAddDevice: true, KeyAddDevice: true,
KeyAnnotation: true, KeyAnnotation: true,
KeyAutoUpdate: true, KeyAutoUpdate: true,
KeyCgroupsMode: true,
KeyContainerName: true, KeyContainerName: true,
KeyContainersConfModule: true, KeyContainersConfModule: true,
KeyDNS: true, KeyDNS: true,
@ -581,7 +583,12 @@ func ConvertContainer(container *parser.UnitFile, isUser bool, unitsInfoMap map[
// We delegate groups to the runtime // We delegate groups to the runtime
service.Add(ServiceGroup, "Delegate", "yes") service.Add(ServiceGroup, "Delegate", "yes")
podman.add("--cgroups=split")
if cgroupsMode, ok := container.Lookup(ContainerGroup, KeyCgroupsMode); ok && len(cgroupsMode) > 0 {
podman.addf("--cgroups=%s", cgroupsMode)
} else {
podman.add("--cgroups=split")
}
timezone, ok := container.Lookup(ContainerGroup, KeyTimezone) timezone, ok := container.Lookup(ContainerGroup, KeyTimezone)
if ok && len(timezone) > 0 { if ok && len(timezone) > 0 {

View File

@ -0,0 +1,5 @@
## assert-podman-args --cgroups=no-conmon
[Container]
Image=localhost/imagename
CgroupsMode=no-conmon

View File

@ -897,6 +897,7 @@ BOGUS=foo
Entry("template@instance.container", "template@instance.container"), Entry("template@instance.container", "template@instance.container"),
Entry("Unit After Override", "unit-after-override.container"), Entry("Unit After Override", "unit-after-override.container"),
Entry("NetworkAlias", "network-alias.container"), Entry("NetworkAlias", "network-alias.container"),
Entry("CgroupMode", "cgroups-mode.container"),
Entry("basic.volume", "basic.volume"), Entry("basic.volume", "basic.volume"),
Entry("device-copy.volume", "device-copy.volume"), Entry("device-copy.volume", "device-copy.volume"),