Merge pull request #24749 from Honny1/fix-#24610

`podman update`: Fix overwriting of `LinuxResources` structure
This commit is contained in:
openshift-merge-bot[bot] 2024-12-04 18:22:40 +00:00 committed by GitHub
commit c707cbe07d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 2 deletions

View File

@ -2674,7 +2674,12 @@ func (c *Container) update(resources *spec.LinuxResources, restartPolicy *string
return fmt.Errorf("must provide restart policy if updating restart retries: %w", define.ErrInvalidArg)
}
oldResources := c.config.Spec.Linux.Resources
oldResources := new(spec.LinuxResources)
if c.config.Spec.Linux.Resources != nil {
if err := JSONDeepCopy(c.config.Spec.Linux.Resources, oldResources); err != nil {
return err
}
}
oldRestart := c.config.RestartPolicy
oldRetries := c.config.RestartRetries
@ -2701,7 +2706,15 @@ func (c *Container) update(resources *spec.LinuxResources, restartPolicy *string
if c.config.Spec.Linux == nil {
c.config.Spec.Linux = new(spec.Linux)
}
c.config.Spec.Linux.Resources = resources
resourcesToUpdate, err := json.Marshal(resources)
if err != nil {
return err
}
if err := json.Unmarshal(resourcesToUpdate, c.config.Spec.Linux.Resources); err != nil {
return err
}
resources = c.config.Spec.Linux.Resources
}
if err := c.runtime.state.SafeRewriteContainerConfig(c, "", "", c.config); err != nil {

View File

@ -309,4 +309,21 @@ function nrand() {
run_podman rm -t 0 -f $ctrname
}
# bats test_tags=ci:parallel
@test "podman update - resources on update are not changed unless requested" {
local ctrname="c-h-$(safename)"
run_podman run -d --name $ctrname \
--pids-limit 1024 \
$IMAGE /home/podman/pause
run_podman update $ctrname --memory 100M
# A Pid check is performed to ensure that other resource settings are not unset. https://github.com/containers/podman/issues/24610
run_podman inspect $ctrname --format "{{.HostConfig.Memory}}\n{{.HostConfig.PidsLimit}}"
assert ${lines[0]} == "104857600" ".HostConfig.Memory"
assert ${lines[1]} == "1024" ".HostConfig.PidsLimit"
run_podman rm -t 0 -f $ctrname
}
# vim: filetype=sh