daemon/cluster/executor: Add volume Subpath
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
parent
5368c3a04f
commit
d3c051318f
3 changed files with 39 additions and 5 deletions
|
@ -120,8 +120,9 @@ func containerSpecFromGRPC(c *swarmapi.ContainerSpec) *types.ContainerSpec {
|
||||||
|
|
||||||
if m.VolumeOptions != nil {
|
if m.VolumeOptions != nil {
|
||||||
mount.VolumeOptions = &mounttypes.VolumeOptions{
|
mount.VolumeOptions = &mounttypes.VolumeOptions{
|
||||||
NoCopy: m.VolumeOptions.NoCopy,
|
NoCopy: m.VolumeOptions.NoCopy,
|
||||||
Labels: m.VolumeOptions.Labels,
|
Labels: m.VolumeOptions.Labels,
|
||||||
|
Subpath: m.VolumeOptions.Subpath,
|
||||||
}
|
}
|
||||||
if m.VolumeOptions.DriverConfig != nil {
|
if m.VolumeOptions.DriverConfig != nil {
|
||||||
mount.VolumeOptions.DriverConfig = &mounttypes.Driver{
|
mount.VolumeOptions.DriverConfig = &mounttypes.Driver{
|
||||||
|
@ -406,8 +407,9 @@ func containerToGRPC(c *types.ContainerSpec) (*swarmapi.ContainerSpec, error) {
|
||||||
|
|
||||||
if m.VolumeOptions != nil {
|
if m.VolumeOptions != nil {
|
||||||
mount.VolumeOptions = &swarmapi.Mount_VolumeOptions{
|
mount.VolumeOptions = &swarmapi.Mount_VolumeOptions{
|
||||||
NoCopy: m.VolumeOptions.NoCopy,
|
NoCopy: m.VolumeOptions.NoCopy,
|
||||||
Labels: m.VolumeOptions.Labels,
|
Labels: m.VolumeOptions.Labels,
|
||||||
|
Subpath: m.VolumeOptions.Subpath,
|
||||||
}
|
}
|
||||||
if m.VolumeOptions.DriverConfig != nil {
|
if m.VolumeOptions.DriverConfig != nil {
|
||||||
mount.VolumeOptions.DriverConfig = &swarmapi.Driver{
|
mount.VolumeOptions.DriverConfig = &swarmapi.Driver{
|
||||||
|
|
|
@ -4,11 +4,13 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
containertypes "github.com/docker/docker/api/types/container"
|
containertypes "github.com/docker/docker/api/types/container"
|
||||||
|
"github.com/docker/docker/api/types/mount"
|
||||||
swarmtypes "github.com/docker/docker/api/types/swarm"
|
swarmtypes "github.com/docker/docker/api/types/swarm"
|
||||||
"github.com/docker/docker/api/types/swarm/runtime"
|
"github.com/docker/docker/api/types/swarm/runtime"
|
||||||
google_protobuf3 "github.com/gogo/protobuf/types"
|
google_protobuf3 "github.com/gogo/protobuf/types"
|
||||||
swarmapi "github.com/moby/swarmkit/v2/api"
|
swarmapi "github.com/moby/swarmkit/v2/api"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
|
is "gotest.tools/v3/assert/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestServiceConvertFromGRPCRuntimeContainer(t *testing.T) {
|
func TestServiceConvertFromGRPCRuntimeContainer(t *testing.T) {
|
||||||
|
@ -611,3 +613,32 @@ func TestServiceConvertToGRPCConfigs(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestServiceConvertToGRPCVolumeSubpath(t *testing.T) {
|
||||||
|
s := swarmtypes.ServiceSpec{
|
||||||
|
TaskTemplate: swarmtypes.TaskSpec{
|
||||||
|
ContainerSpec: &swarmtypes.ContainerSpec{
|
||||||
|
Mounts: []mount.Mount{
|
||||||
|
{
|
||||||
|
Source: "/foo/bar",
|
||||||
|
Target: "/baz",
|
||||||
|
Type: mount.TypeVolume,
|
||||||
|
ReadOnly: false,
|
||||||
|
VolumeOptions: &mount.VolumeOptions{
|
||||||
|
Subpath: "sub",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
g, err := ServiceSpecToGRPC(s)
|
||||||
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
v, ok := g.Task.Runtime.(*swarmapi.TaskSpec_Container)
|
||||||
|
assert.Assert(t, ok)
|
||||||
|
|
||||||
|
assert.Check(t, is.Len(v.Container.Mounts, 1))
|
||||||
|
assert.Check(t, is.Equal(v.Container.Mounts[0].VolumeOptions.Subpath, "sub"))
|
||||||
|
}
|
||||||
|
|
|
@ -338,7 +338,8 @@ func convertMount(m api.Mount) enginemount.Mount {
|
||||||
|
|
||||||
if m.VolumeOptions != nil {
|
if m.VolumeOptions != nil {
|
||||||
mount.VolumeOptions = &enginemount.VolumeOptions{
|
mount.VolumeOptions = &enginemount.VolumeOptions{
|
||||||
NoCopy: m.VolumeOptions.NoCopy,
|
NoCopy: m.VolumeOptions.NoCopy,
|
||||||
|
Subpath: m.VolumeOptions.Subpath,
|
||||||
}
|
}
|
||||||
if m.VolumeOptions.Labels != nil {
|
if m.VolumeOptions.Labels != nil {
|
||||||
mount.VolumeOptions.Labels = make(map[string]string, len(m.VolumeOptions.Labels))
|
mount.VolumeOptions.Labels = make(map[string]string, len(m.VolumeOptions.Labels))
|
||||||
|
|
Loading…
Reference in a new issue