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:
Christian Simon
2016-08-01 11:45:03 +01:00
parent 15daecea7f
commit 1c11047ffb
21 changed files with 36958 additions and 36726 deletions

View File

@@ -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 '/'"))

View File

@@ -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",