Fix overwriting of LinuxResources structure in the database
with defaults values when changes configuration with podman update. The new LinuxResource structure does not represent the current unchanged configuration, which was not affected by the change. Fixes: https://issues.redhat.com/browse/RUN-2375 Signed-off-by: Jan Rodák <hony.com@seznam.cz>
This commit is contained in:
parent
bf1661c930
commit
8f1266c717
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue