Merge pull request #7227 from kawmy/7226-preserve-mount-order

cli/command/service: preserve mount order on force update
This commit is contained in:
Sebastiaan van Stijn
2026-09-02 02:40:47 +02:00
committed by GitHub
2 changed files with 30 additions and 2 deletions
+4 -2
View File
@@ -352,8 +352,10 @@ func updateService(ctx context.Context, apiClient client.NetworkAPIClient, flags
if err := updateIsolation(flagIsolation, &cspec.Isolation); err != nil {
return err
}
if err := updateMounts(flags, &cspec.Mounts); err != nil {
return err
if anyChanged(flags, flagMountAdd, flagMountRemove) {
if err := updateMounts(flags, &cspec.Mounts); err != nil {
return err
}
}
updateSysCtls(flags, &task.ContainerSpec.Sysctls)
+26
View File
@@ -250,6 +250,32 @@ func TestUpdateMounts(t *testing.T) {
assert.Check(t, is.Equal("/tokeep", mounts[1].Target))
}
func TestUpdateServiceForcePreservesMountOrder(t *testing.T) {
flags := newUpdateCommand(nil).Flags()
assert.NilError(t, flags.Set("force", "true"))
spec := &swarm.ServiceSpec{
TaskTemplate: swarm.TaskSpec{
ContainerSpec: &swarm.ContainerSpec{
Mounts: []mount.Mount{
{Type: mount.TypeVolume, Source: "z-volume", Target: "/data/z"},
{Type: mount.TypeVolume, Source: "a-volume", Target: "/data/a"},
{Type: mount.TypeVolume, Source: "m-volume", Target: "/data/m"},
},
},
},
}
err := updateService(context.Background(), nil, flags, spec)
assert.NilError(t, err)
assert.Equal(t, spec.TaskTemplate.ForceUpdate, uint64(1))
assert.DeepEqual(t, spec.TaskTemplate.ContainerSpec.Mounts, []mount.Mount{
{Type: mount.TypeVolume, Source: "z-volume", Target: "/data/z"},
{Type: mount.TypeVolume, Source: "a-volume", Target: "/data/a"},
{Type: mount.TypeVolume, Source: "m-volume", Target: "/data/m"},
})
}
func TestUpdateMountsWithDuplicateMounts(t *testing.T) {
flags := newUpdateCommand(nil).Flags()
flags.Set("mount-add", "type=volume,source=vol4,target=/toadd")