Add support for AddHost in quadlet .pod and .container

Signed-off-by: Jerome degroote <jeromedu59230@gmx.fr>
This commit is contained in:
Jerome Degroote
2024-08-22 14:22:46 +02:00
parent d55b12f70b
commit 7c5d8bec0d
5 changed files with 44 additions and 0 deletions

View File

@ -257,6 +257,7 @@ Valid options for `[Container]` are listed below:
|--------------------------------------|------------------------------------------------------| |--------------------------------------|------------------------------------------------------|
| AddCapability=CAP | --cap-add CAP | | AddCapability=CAP | --cap-add CAP |
| AddDevice=/dev/foo | --device /dev/foo | | AddDevice=/dev/foo | --device /dev/foo |
| AddHost=hostname:192.168.10.11 | --add-host=hostname:192.168.10.11 |
| 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 | | CgroupsMode=no-conmon | --cgroups=no-conmon |
@ -356,6 +357,14 @@ only if it exists on the host.
This key can be listed multiple times. This key can be listed multiple times.
### `AddHost=`
Add host-to-IP mapping to /etc/hosts.
The format is `hostname:ip`.
Equivalent to the Podman `--add-host` option.
This key can be listed multiple times.
### `Annotation=` ### `Annotation=`
Set one or more OCI annotations on the container. The format is a list of `key=value` items, Set one or more OCI annotations on the container. The format is a list of `key=value` items,
@ -877,6 +886,7 @@ Valid options for `[Pod]` are listed below:
| **[Pod] options** | **podman container create equivalent** | | **[Pod] options** | **podman container create equivalent** |
|-------------------------------------|----------------------------------------| |-------------------------------------|----------------------------------------|
| AddHost=hostname:192.168.10.11 | --add-host=hostname:192.168.10.11 |
| ContainersConfModule=/etc/nvd\.conf | --module=/etc/nvd\.conf | | ContainersConfModule=/etc/nvd\.conf | --module=/etc/nvd\.conf |
| GIDMap=0:10000:10 | --gidmap=0:10000:10 | | GIDMap=0:10000:10 | --gidmap=0:10000:10 |
| GlobalArgs=--log-level=debug | --log-level=debug | | GlobalArgs=--log-level=debug | --log-level=debug |
@ -896,6 +906,14 @@ Valid options for `[Pod]` are listed below:
Supported keys in the `[Pod]` section are: Supported keys in the `[Pod]` section are:
### `AddHost=`
Add host-to-IP mapping to /etc/hosts.
The format is `hostname:ip`.
Equivalent to the Podman `--add-host` option.
This key can be listed multiple times.
### `ContainersConfModule=` ### `ContainersConfModule=`
Load the specified containers.conf(5) module. Equivalent to the Podman `--module` option. Load the specified containers.conf(5) module. Equivalent to the Podman `--module` option.

View File

@ -56,6 +56,7 @@ const (
const ( const (
KeyAddCapability = "AddCapability" KeyAddCapability = "AddCapability"
KeyAddDevice = "AddDevice" KeyAddDevice = "AddDevice"
KeyAddHost = "AddHost"
KeyAllTags = "AllTags" KeyAllTags = "AllTags"
KeyAnnotation = "Annotation" KeyAnnotation = "Annotation"
KeyArch = "Arch" KeyArch = "Arch"
@ -190,6 +191,7 @@ var (
supportedContainerKeys = map[string]bool{ supportedContainerKeys = map[string]bool{
KeyAddCapability: true, KeyAddCapability: true,
KeyAddDevice: true, KeyAddDevice: true,
KeyAddHost: true,
KeyAnnotation: true, KeyAnnotation: true,
KeyAutoUpdate: true, KeyAutoUpdate: true,
KeyCgroupsMode: true, KeyCgroupsMode: true,
@ -381,6 +383,7 @@ var (
} }
supportedPodKeys = map[string]bool{ supportedPodKeys = map[string]bool{
KeyAddHost: true,
KeyContainersConfModule: true, KeyContainersConfModule: true,
KeyGIDMap: true, KeyGIDMap: true,
KeyGlobalArgs: true, KeyGlobalArgs: true,
@ -832,6 +835,11 @@ func ConvertContainer(container *parser.UnitFile, isUser bool, unitsInfoMap map[
podman.add("--ip6", ip6) podman.add("--ip6", ip6)
} }
addHosts := container.LookupAll(ContainerGroup, KeyAddHost)
for _, addHost := range addHosts {
podman.addf("--add-host=%s", addHost)
}
labels := container.LookupAllKeyVal(ContainerGroup, KeyLabel) labels := container.LookupAllKeyVal(ContainerGroup, KeyLabel)
podman.addLabels(labels) podman.addLabels(labels)
@ -1691,6 +1699,11 @@ func ConvertPod(podUnit *parser.UnitFile, name string, unitsInfoMap map[string]*
execStartPre.addf("--ip6=%s", ip6) execStartPre.addf("--ip6=%s", ip6)
} }
addHosts := podUnit.LookupAll(PodGroup, KeyAddHost)
for _, addHost := range addHosts {
execStartPre.addf("--add-host=%s", addHost)
}
handlePodmanArgs(podUnit, PodGroup, execStartPre) handlePodmanArgs(podUnit, PodGroup, execStartPre)
service.AddCmdline(ServiceGroup, "ExecStartPre", execStartPre.Args) service.AddCmdline(ServiceGroup, "ExecStartPre", execStartPre.Args)

View File

@ -0,0 +1,6 @@
[Container]
Image=localhost/imagename
## assert-podman-args "--add-host=my-host-name:192.168.10.10"
AddHost=my-host-name:192.168.10.10
## assert-podman-args "--add-host=my-second-host-name:192.168.10.11"
AddHost=my-second-host-name:192.168.10.11

View File

@ -0,0 +1,5 @@
[Pod]
## assert-podman-pre-args "--add-host=my-host-name:192.168.10.10"
AddHost=my-host-name:192.168.10.10
## assert-podman-pre-args "--add-host=my-second-host-name:192.168.10.11"
AddHost=my-second-host-name:192.168.10.11

View File

@ -841,6 +841,7 @@ BOGUS=foo
Entry("exec.container", "exec.container"), Entry("exec.container", "exec.container"),
Entry("group-add.container", "group-add.container"), Entry("group-add.container", "group-add.container"),
Entry("health.container", "health.container"), Entry("health.container", "health.container"),
Entry("host.container", "host.container"),
Entry("hostname.container", "hostname.container"), Entry("hostname.container", "hostname.container"),
Entry("idmapping.container", "idmapping.container"), Entry("idmapping.container", "idmapping.container"),
Entry("image.container", "image.container"), Entry("image.container", "image.container"),
@ -1000,6 +1001,7 @@ BOGUS=foo
Entry("Build - Variant Key", "variant.build"), Entry("Build - Variant Key", "variant.build"),
Entry("Pod - Basic", "basic.pod"), Entry("Pod - Basic", "basic.pod"),
Entry("Pod - Host", "host.pod"),
Entry("Pod - IP", "ip.pod"), Entry("Pod - IP", "ip.pod"),
Entry("Pod - Name", "name.pod"), Entry("Pod - Name", "name.pod"),
Entry("Pod - Network", "network.pod"), Entry("Pod - Network", "network.pod"),