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
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) 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 oldRestart := c.config.RestartPolicy
oldRetries := c.config.RestartRetries oldRetries := c.config.RestartRetries
@@ -2701,7 +2706,15 @@ func (c *Container) update(resources *spec.LinuxResources, restartPolicy *string
if c.config.Spec.Linux == nil { if c.config.Spec.Linux == nil {
c.config.Spec.Linux = new(spec.Linux) 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 { 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 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 # vim: filetype=sh