mirror of
https://github.com/containers/podman.git
synced 2025-12-02 11:08:36 +08:00
Merge pull request #24749 from Honny1/fix-#24610
`podman update`: Fix overwriting of `LinuxResources` structure
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user