mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
stack deploy exits with error if both 'external' and any other options are specified for volumes
Signed-off-by: Arash Deshmeh <adeshmeh@ca.ibm.com>
This commit is contained in:
parent
ba5c0f88d5
commit
96039b394a
2 changed files with 59 additions and 3 deletions
|
@ -427,9 +427,21 @@ func loadVolumes(source types.Dict) (map[string]types.VolumeConfig, error) {
|
|||
return volumes, err
|
||||
}
|
||||
for name, volume := range volumes {
|
||||
if volume.External.External && volume.External.Name == "" {
|
||||
volume.External.Name = name
|
||||
volumes[name] = volume
|
||||
if volume.External.External {
|
||||
template := "conflicting parameters \"external\" and %q specified for volume %q"
|
||||
if volume.Driver != "" {
|
||||
return nil, fmt.Errorf(template, "driver", name)
|
||||
}
|
||||
if len(volume.DriverOpts) > 0 {
|
||||
return nil, fmt.Errorf(template, "driver_opts", name)
|
||||
}
|
||||
if len(volume.Labels) > 0 {
|
||||
return nil, fmt.Errorf(template, "labels", name)
|
||||
}
|
||||
if volume.External.Name == "" {
|
||||
volume.External.Name = name
|
||||
volumes[name] = volume
|
||||
}
|
||||
}
|
||||
}
|
||||
return volumes, nil
|
||||
|
|
|
@ -541,6 +541,50 @@ services:
|
|||
assert.Contains(t, forbidden, "extends")
|
||||
}
|
||||
|
||||
func TestInvalidExternalAndDriverCombination(t *testing.T) {
|
||||
_, err := loadYAML(`
|
||||
version: "3"
|
||||
volumes:
|
||||
external_volume:
|
||||
external: true
|
||||
driver: foobar
|
||||
`)
|
||||
|
||||
assert.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "conflicting parameters \"external\" and \"driver\" specified for volume")
|
||||
assert.Contains(t, err.Error(), "external_volume")
|
||||
}
|
||||
|
||||
func TestInvalidExternalAndDirverOptsCombination(t *testing.T) {
|
||||
_, err := loadYAML(`
|
||||
version: "3"
|
||||
volumes:
|
||||
external_volume:
|
||||
external: true
|
||||
driver_opts:
|
||||
beep: boop
|
||||
`)
|
||||
|
||||
assert.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "conflicting parameters \"external\" and \"driver_opts\" specified for volume")
|
||||
assert.Contains(t, err.Error(), "external_volume")
|
||||
}
|
||||
|
||||
func TestInvalidExternalAndLabelsCombination(t *testing.T) {
|
||||
_, err := loadYAML(`
|
||||
version: "3"
|
||||
volumes:
|
||||
external_volume:
|
||||
external: true
|
||||
labels:
|
||||
- beep=boop
|
||||
`)
|
||||
|
||||
assert.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "conflicting parameters \"external\" and \"labels\" specified for volume")
|
||||
assert.Contains(t, err.Error(), "external_volume")
|
||||
}
|
||||
|
||||
func durationPtr(value time.Duration) *time.Duration {
|
||||
return &value
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue