Browse Source

Merge pull request #31040 from BSWANG/master

fix docker stack omit external volume's "nocopy" parameter
Victor Vieux 8 years ago
parent
commit
07aaa71806
2 changed files with 29 additions and 0 deletions
  1. 3 0
      cli/compose/convert/volume.go
  2. 26 0
      cli/compose/convert/volume_test.go

+ 3 - 0
cli/compose/convert/volume.go

@@ -75,6 +75,9 @@ func convertVolumeToMount(volumeSpec string, stackVolumes volumes, namespace Nam
 
 
 	var volumeOptions *mount.VolumeOptions
 	var volumeOptions *mount.VolumeOptions
 	if stackVolume.External.Name != "" {
 	if stackVolume.External.Name != "" {
+		volumeOptions = &mount.VolumeOptions{
+			NoCopy: isNoCopy(mode),
+		}
 		source = stackVolume.External.Name
 		source = stackVolume.External.Name
 	} else {
 	} else {
 		volumeOptions = &mount.VolumeOptions{
 		volumeOptions = &mount.VolumeOptions{

+ 26 - 0
cli/compose/convert/volume_test.go

@@ -105,12 +105,38 @@ func TestConvertVolumeToMountNamedVolumeExternal(t *testing.T) {
 		Type:   mount.TypeVolume,
 		Type:   mount.TypeVolume,
 		Source: "special",
 		Source: "special",
 		Target: "/foo",
 		Target: "/foo",
+		VolumeOptions: &mount.VolumeOptions{
+			NoCopy: false,
+		},
 	}
 	}
 	mount, err := convertVolumeToMount("outside:/foo", stackVolumes, namespace)
 	mount, err := convertVolumeToMount("outside:/foo", stackVolumes, namespace)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 	assert.DeepEqual(t, mount, expected)
 	assert.DeepEqual(t, mount, expected)
 }
 }
 
 
+func TestConvertVolumeToMountNamedVolumeExternalNoCopy(t *testing.T) {
+	stackVolumes := volumes{
+		"outside": composetypes.VolumeConfig{
+			External: composetypes.External{
+				External: true,
+				Name:     "special",
+			},
+		},
+	}
+	namespace := NewNamespace("foo")
+	expected := mount.Mount{
+		Type:   mount.TypeVolume,
+		Source: "special",
+		Target: "/foo",
+		VolumeOptions: &mount.VolumeOptions{
+			NoCopy: true,
+		},
+	}
+	mount, err := convertVolumeToMount("outside:/foo:nocopy", stackVolumes, namespace)
+	assert.NilError(t, err)
+	assert.DeepEqual(t, mount, expected)
+}
+
 func TestConvertVolumeToMountBind(t *testing.T) {
 func TestConvertVolumeToMountBind(t *testing.T) {
 	stackVolumes := volumes{}
 	stackVolumes := volumes{}
 	namespace := NewNamespace("foo")
 	namespace := NewNamespace("foo")