Adds datasetUUID for referencing flocker datasets
* flocker datasets should be attached using an unique identifier. This is not the case for the name metadata used by datasetName * allow only one of datasetUUID / datasetName specified
This commit is contained in:
@@ -855,8 +855,12 @@ func validateGlusterfs(glusterfs *api.GlusterfsVolumeSource, fldPath *field.Path
|
||||
|
||||
func validateFlockerVolumeSource(flocker *api.FlockerVolumeSource, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
if len(flocker.DatasetName) == 0 {
|
||||
allErrs = append(allErrs, field.Required(fldPath.Child("datasetName"), ""))
|
||||
if len(flocker.DatasetName) == 0 && len(flocker.DatasetUUID) == 0 {
|
||||
//TODO: consider adding a RequiredOneOf() error for this and similar cases
|
||||
allErrs = append(allErrs, field.Required(fldPath, "one of datasetName and datasetUUID is required"))
|
||||
}
|
||||
if len(flocker.DatasetName) != 0 && len(flocker.DatasetUUID) != 0 {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath, "resource", "datasetName and datasetUUID can not be specified simultaneously"))
|
||||
}
|
||||
if strings.Contains(flocker.DatasetName, "/") {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("datasetName"), flocker.DatasetName, "must not contain '/'"))
|
||||
|
@@ -1520,7 +1520,18 @@ func TestValidateVolumes(t *testing.T) {
|
||||
},
|
||||
// Flocker
|
||||
{
|
||||
name: "valid Flocker",
|
||||
name: "valid Flocker -- datasetUUID",
|
||||
vol: api.Volume{
|
||||
Name: "flocker",
|
||||
VolumeSource: api.VolumeSource{
|
||||
Flocker: &api.FlockerVolumeSource{
|
||||
DatasetUUID: "d846b09d-223d-43df-ab5b-d6db2206a0e4",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "valid Flocker -- datasetName",
|
||||
vol: api.Volume{
|
||||
Name: "flocker",
|
||||
VolumeSource: api.VolumeSource{
|
||||
@@ -1531,7 +1542,7 @@ func TestValidateVolumes(t *testing.T) {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "empty flocker datasetName",
|
||||
name: "both empty",
|
||||
vol: api.Volume{
|
||||
Name: "flocker",
|
||||
VolumeSource: api.VolumeSource{
|
||||
@@ -1541,7 +1552,21 @@ func TestValidateVolumes(t *testing.T) {
|
||||
},
|
||||
},
|
||||
errtype: field.ErrorTypeRequired,
|
||||
errfield: "flocker.datasetName",
|
||||
errfield: "flocker",
|
||||
},
|
||||
{
|
||||
name: "both specified",
|
||||
vol: api.Volume{
|
||||
Name: "flocker",
|
||||
VolumeSource: api.VolumeSource{
|
||||
Flocker: &api.FlockerVolumeSource{
|
||||
DatasetName: "datasetName",
|
||||
DatasetUUID: "d846b09d-223d-43df-ab5b-d6db2206a0e4",
|
||||
},
|
||||
},
|
||||
},
|
||||
errtype: field.ErrorTypeInvalid,
|
||||
errfield: "flocker",
|
||||
},
|
||||
{
|
||||
name: "slash in flocker datasetName",
|
||||
|
Reference in New Issue
Block a user