storage: validate CSIDriver.Spec.VolumeLifecycleModes

This ensures that users get a good error message early on when trying
to do something that isn't okay:

  $ kubectl create -f csi-hostpath-driverinfo.yaml
  The CSIDriver "hostpath.csi.k8s.io" is invalid: spec.volumeLifecycleModes: Unsupported value: "foobar": supported values: "persistent", "ephemeral"
This commit is contained in:
Patrick Ohly
2019-07-26 13:52:37 +02:00
parent f7742fd31a
commit b60f08e24b
3 changed files with 138 additions and 0 deletions

View File

@@ -419,6 +419,7 @@ func validateCSIDriverSpec(
allErrs := field.ErrorList{}
allErrs = append(allErrs, validateAttachRequired(spec.AttachRequired, fldPath.Child("attachedRequired"))...)
allErrs = append(allErrs, validatePodInfoOnMount(spec.PodInfoOnMount, fldPath.Child("podInfoOnMount"))...)
allErrs = append(allErrs, validateVolumeLifecycleModes(spec.VolumeLifecycleModes, fldPath.Child("volumeLifecycleModes"))...)
return allErrs
}
@@ -441,3 +442,21 @@ func validatePodInfoOnMount(podInfoOnMount *bool, fldPath *field.Path) field.Err
return allErrs
}
// validateVolumeLifecycleModes tests if mode has one of the allowed values.
func validateVolumeLifecycleModes(modes []storage.VolumeLifecycleMode, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
for _, mode := range modes {
switch mode {
case storage.VolumeLifecyclePersistent, storage.VolumeLifecycleEphemeral:
default:
allErrs = append(allErrs, field.NotSupported(fldPath, mode,
[]string{
string(storage.VolumeLifecyclePersistent),
string(storage.VolumeLifecycleEphemeral),
}))
}
}
return allErrs
}