From d55b12f70bef47d019b76a0dae60d545f14a8dd4 Mon Sep 17 00:00:00 2001 From: Jerome Degroote Date: Thu, 22 Aug 2024 12:27:14 +0200 Subject: [PATCH 1/2] Add support for IP in quadlet .pod files Signed-off-by: Jerome degroote --- docs/source/markdown/podman-systemd.unit.5.md | 12 ++++++++++++ pkg/systemd/quadlet/quadlet.go | 12 ++++++++++++ test/e2e/quadlet/ip.pod | 6 ++++++ test/e2e/quadlet_test.go | 1 + 4 files changed, 31 insertions(+) create mode 100644 test/e2e/quadlet/ip.pod diff --git a/docs/source/markdown/podman-systemd.unit.5.md b/docs/source/markdown/podman-systemd.unit.5.md index 54ab054ee2..bcae4af627 100644 --- a/docs/source/markdown/podman-systemd.unit.5.md +++ b/docs/source/markdown/podman-systemd.unit.5.md @@ -880,6 +880,8 @@ Valid options for `[Pod]` are listed below: | ContainersConfModule=/etc/nvd\.conf | --module=/etc/nvd\.conf | | GIDMap=0:10000:10 | --gidmap=0:10000:10 | | GlobalArgs=--log-level=debug | --log-level=debug | +| IP=192.5.0.1 | --ip 192.5.0.1 | +| IP6=2001:db8::1 | --ip6 2001:db8::1 | | Network=host | --network host | | NetworkAlias=name | --network-alias name | | PodmanArgs=\-\-cpus=2 | --cpus=2 | @@ -919,6 +921,16 @@ escaped to allow inclusion of whitespace and other control characters. This key can be listed multiple times. +### `IP=` + +Specify a static IPv4 address for the pod, for example **10.88.64.128**. +Equivalent to the Podman `--ip` option. + +### `IP6=` + +Specify a static IPv6 address for the pod, for example **fd46:db93:aa76:ac37::10**. +Equivalent to the Podman `--ip6` option. + ### `Network=` Specify a custom network for the pod. diff --git a/pkg/systemd/quadlet/quadlet.go b/pkg/systemd/quadlet/quadlet.go index 31b3e29b20..d667826f9b 100644 --- a/pkg/systemd/quadlet/quadlet.go +++ b/pkg/systemd/quadlet/quadlet.go @@ -384,6 +384,8 @@ var ( KeyContainersConfModule: true, KeyGIDMap: true, KeyGlobalArgs: true, + KeyIP: true, + KeyIP6: true, KeyNetwork: true, KeyNetworkAlias: true, KeyPodName: true, @@ -1679,6 +1681,16 @@ func ConvertPod(podUnit *parser.UnitFile, name string, unitsInfoMap map[string]* execStartPre.addf("--infra-name=%s-infra", podName) execStartPre.addf("--name=%s", podName) + ip, ok := podUnit.Lookup(PodGroup, KeyIP) + if ok && len(ip) > 0 { + execStartPre.addf("--ip=%s", ip) + } + + ip6, ok := podUnit.Lookup(PodGroup, KeyIP6) + if ok && len(ip6) > 0 { + execStartPre.addf("--ip6=%s", ip6) + } + handlePodmanArgs(podUnit, PodGroup, execStartPre) service.AddCmdline(ServiceGroup, "ExecStartPre", execStartPre.Args) diff --git a/test/e2e/quadlet/ip.pod b/test/e2e/quadlet/ip.pod new file mode 100644 index 0000000000..8df5ed2c55 --- /dev/null +++ b/test/e2e/quadlet/ip.pod @@ -0,0 +1,6 @@ +## assert-podman-pre-args "--ip=10.88.64.128" +## assert-podman-pre-args "--ip6=fd46:db93:aa76:ac37::10" + +[Pod] +IP=10.88.64.128 +IP6=fd46:db93:aa76:ac37::10 diff --git a/test/e2e/quadlet_test.go b/test/e2e/quadlet_test.go index 83cbdab710..bbe5b6e664 100644 --- a/test/e2e/quadlet_test.go +++ b/test/e2e/quadlet_test.go @@ -1000,6 +1000,7 @@ BOGUS=foo Entry("Build - Variant Key", "variant.build"), Entry("Pod - Basic", "basic.pod"), + Entry("Pod - IP", "ip.pod"), Entry("Pod - Name", "name.pod"), Entry("Pod - Network", "network.pod"), Entry("Pod - PodmanArgs", "podmanargs.pod"), From 7c5d8bec0d68d51ca46d034a711bf7cdac238a45 Mon Sep 17 00:00:00 2001 From: Jerome Degroote Date: Thu, 22 Aug 2024 14:22:46 +0200 Subject: [PATCH 2/2] Add support for AddHost in quadlet .pod and .container Signed-off-by: Jerome degroote --- docs/source/markdown/podman-systemd.unit.5.md | 18 ++++++++++++++++++ pkg/systemd/quadlet/quadlet.go | 13 +++++++++++++ test/e2e/quadlet/host.container | 6 ++++++ test/e2e/quadlet/host.pod | 5 +++++ test/e2e/quadlet_test.go | 2 ++ 5 files changed, 44 insertions(+) create mode 100644 test/e2e/quadlet/host.container create mode 100644 test/e2e/quadlet/host.pod diff --git a/docs/source/markdown/podman-systemd.unit.5.md b/docs/source/markdown/podman-systemd.unit.5.md index bcae4af627..a86553081a 100644 --- a/docs/source/markdown/podman-systemd.unit.5.md +++ b/docs/source/markdown/podman-systemd.unit.5.md @@ -257,6 +257,7 @@ Valid options for `[Container]` are listed below: |--------------------------------------|------------------------------------------------------| | AddCapability=CAP | --cap-add CAP | | AddDevice=/dev/foo | --device /dev/foo | +| AddHost=hostname:192.168.10.11 | --add-host=hostname:192.168.10.11 | | Annotation="XYZ" | --annotation "XYZ" | | AutoUpdate=registry | --label "io.containers.autoupdate=registry" | | CgroupsMode=no-conmon | --cgroups=no-conmon | @@ -356,6 +357,14 @@ only if it exists on the host. 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=` 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** | |-------------------------------------|----------------------------------------| +| AddHost=hostname:192.168.10.11 | --add-host=hostname:192.168.10.11 | | ContainersConfModule=/etc/nvd\.conf | --module=/etc/nvd\.conf | | GIDMap=0:10000:10 | --gidmap=0:10000:10 | | 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: +### `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=` Load the specified containers.conf(5) module. Equivalent to the Podman `--module` option. diff --git a/pkg/systemd/quadlet/quadlet.go b/pkg/systemd/quadlet/quadlet.go index d667826f9b..6720c99724 100644 --- a/pkg/systemd/quadlet/quadlet.go +++ b/pkg/systemd/quadlet/quadlet.go @@ -56,6 +56,7 @@ const ( const ( KeyAddCapability = "AddCapability" KeyAddDevice = "AddDevice" + KeyAddHost = "AddHost" KeyAllTags = "AllTags" KeyAnnotation = "Annotation" KeyArch = "Arch" @@ -190,6 +191,7 @@ var ( supportedContainerKeys = map[string]bool{ KeyAddCapability: true, KeyAddDevice: true, + KeyAddHost: true, KeyAnnotation: true, KeyAutoUpdate: true, KeyCgroupsMode: true, @@ -381,6 +383,7 @@ var ( } supportedPodKeys = map[string]bool{ + KeyAddHost: true, KeyContainersConfModule: true, KeyGIDMap: true, KeyGlobalArgs: true, @@ -832,6 +835,11 @@ func ConvertContainer(container *parser.UnitFile, isUser bool, unitsInfoMap map[ podman.add("--ip6", ip6) } + addHosts := container.LookupAll(ContainerGroup, KeyAddHost) + for _, addHost := range addHosts { + podman.addf("--add-host=%s", addHost) + } + labels := container.LookupAllKeyVal(ContainerGroup, KeyLabel) podman.addLabels(labels) @@ -1691,6 +1699,11 @@ func ConvertPod(podUnit *parser.UnitFile, name string, unitsInfoMap map[string]* execStartPre.addf("--ip6=%s", ip6) } + addHosts := podUnit.LookupAll(PodGroup, KeyAddHost) + for _, addHost := range addHosts { + execStartPre.addf("--add-host=%s", addHost) + } + handlePodmanArgs(podUnit, PodGroup, execStartPre) service.AddCmdline(ServiceGroup, "ExecStartPre", execStartPre.Args) diff --git a/test/e2e/quadlet/host.container b/test/e2e/quadlet/host.container new file mode 100644 index 0000000000..2b8314f0aa --- /dev/null +++ b/test/e2e/quadlet/host.container @@ -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 diff --git a/test/e2e/quadlet/host.pod b/test/e2e/quadlet/host.pod new file mode 100644 index 0000000000..88dc2b2480 --- /dev/null +++ b/test/e2e/quadlet/host.pod @@ -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 diff --git a/test/e2e/quadlet_test.go b/test/e2e/quadlet_test.go index bbe5b6e664..6c13ace201 100644 --- a/test/e2e/quadlet_test.go +++ b/test/e2e/quadlet_test.go @@ -841,6 +841,7 @@ BOGUS=foo Entry("exec.container", "exec.container"), Entry("group-add.container", "group-add.container"), Entry("health.container", "health.container"), + Entry("host.container", "host.container"), Entry("hostname.container", "hostname.container"), Entry("idmapping.container", "idmapping.container"), Entry("image.container", "image.container"), @@ -1000,6 +1001,7 @@ BOGUS=foo Entry("Build - Variant Key", "variant.build"), Entry("Pod - Basic", "basic.pod"), + Entry("Pod - Host", "host.pod"), Entry("Pod - IP", "ip.pod"), Entry("Pod - Name", "name.pod"), Entry("Pod - Network", "network.pod"),