From 83fe867c144ea27ba44c0b6fbbf61a8f32eac218 Mon Sep 17 00:00:00 2001 From: diplane Date: Thu, 21 Mar 2024 19:59:36 +0000 Subject: [PATCH] Add support for annotations Fix following issues: - create container API handler ignores Annotations from HostConfig - inspect container API handler does not provide Annotations as part of HostConfig Signed-off-by: diplane --- libpod/container_inspect.go | 4 ++++ libpod/define/container_inspect.go | 3 +++ pkg/api/handlers/compat/containers_create.go | 1 + test/apiv2/28-containersAnnotations.at | 8 ++++++++ 4 files changed, 16 insertions(+) create mode 100644 test/apiv2/28-containersAnnotations.at diff --git a/libpod/container_inspect.go b/libpod/container_inspect.go index da858e820e..1eb2fbb073 100644 --- a/libpod/container_inspect.go +++ b/libpod/container_inspect.go @@ -506,6 +506,10 @@ func (c *Container) generateInspectContainerHostConfig(ctrSpec *spec.Spec, named // Annotations if ctrSpec.Annotations != nil { + if len(ctrSpec.Annotations) != 0 { + hostConfig.Annotations = ctrSpec.Annotations + } + hostConfig.ContainerIDFile = ctrSpec.Annotations[define.InspectAnnotationCIDFile] if ctrSpec.Annotations[define.InspectAnnotationAutoremove] == define.InspectResponseTrue { hostConfig.AutoRemove = true diff --git a/libpod/define/container_inspect.go b/libpod/define/container_inspect.go index 1d36927950..4a06734ec6 100644 --- a/libpod/define/container_inspect.go +++ b/libpod/define/container_inspect.go @@ -364,6 +364,9 @@ type InspectContainerHostConfig struct { // It is not handled directly within libpod and is stored in an // annotation. AutoRemove bool `json:"AutoRemove"` + // Annotations are provided to the runtime when the container is + // started. + Annotations map[string]string `json:"Annotations"` // VolumeDriver is presently unused and is retained for Docker // compatibility. VolumeDriver string `json:"VolumeDriver"` diff --git a/pkg/api/handlers/compat/containers_create.go b/pkg/api/handlers/compat/containers_create.go index 07d6048874..d6ef33dac6 100644 --- a/pkg/api/handlers/compat/containers_create.go +++ b/pkg/api/handlers/compat/containers_create.go @@ -451,6 +451,7 @@ func cliOpts(cc handlers.CreateContainerConfig, rtc *config.Config) (*entities.C ReadOnly: cc.HostConfig.ReadonlyRootfs, ReadWriteTmpFS: true, // podman default Rm: cc.HostConfig.AutoRemove, + Annotation: stringMaptoArray(cc.HostConfig.Annotations), SecurityOpt: cc.HostConfig.SecurityOpt, StopSignal: cc.Config.StopSignal, StopTimeout: rtc.Engine.StopTimeout, // podman default diff --git a/test/apiv2/28-containersAnnotations.at b/test/apiv2/28-containersAnnotations.at new file mode 100644 index 0000000000..89466f555d --- /dev/null +++ b/test/apiv2/28-containersAnnotations.at @@ -0,0 +1,8 @@ +# -*- sh -*- + +podman pull $IMAGE &>/dev/null +t POST containers/create Image=$IMAGE HostConfig='{"annotations":{"foo":"bar","zoo":"boo"}}' 201 .Id~[0-9a-f]\\{64\\} +cid=$(jq -r '.Id' <<<"$output") +t GET containers/$cid/json 200 \ + .HostConfig.Annotations.foo=bar \ + .HostConfig.Annotations.zoo=boo \