Allow a DaemonSet pod template to be updated in storage.
This should allow users to update DaemonSet pods by manually deleting the corresponding running pods. Users can use this mechanism for DaemonSet updates until we implement Deployment style rolling update for DaemonSet.
This commit is contained in:
@@ -172,7 +172,6 @@ func ValidateDaemonSet(controller *extensions.DaemonSet) field.ErrorList {
|
||||
func ValidateDaemonSetUpdate(controller, oldController *extensions.DaemonSet) field.ErrorList {
|
||||
allErrs := apivalidation.ValidateObjectMetaUpdate(&controller.ObjectMeta, &oldController.ObjectMeta, field.NewPath("metadata"))
|
||||
allErrs = append(allErrs, ValidateDaemonSetSpec(&controller.Spec, field.NewPath("spec"))...)
|
||||
allErrs = append(allErrs, ValidateDaemonSetTemplateUpdate(controller.Spec.Template, oldController.Spec.Template, field.NewPath("spec", "template"))...)
|
||||
return allErrs
|
||||
}
|
||||
|
||||
@@ -192,21 +191,6 @@ func ValidateDaemonSetStatusUpdate(controller, oldController *extensions.DaemonS
|
||||
return allErrs
|
||||
}
|
||||
|
||||
// ValidateDaemonSetTemplateUpdate tests that certain fields in the daemon set's pod template are not updated.
|
||||
func ValidateDaemonSetTemplateUpdate(podTemplate, oldPodTemplate api.PodTemplateSpec, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
podSpec := podTemplate.Spec
|
||||
// podTemplate.Spec is not a pointer, so we can modify NodeSelector and NodeName directly.
|
||||
podSpec.NodeSelector = oldPodTemplate.Spec.NodeSelector
|
||||
podSpec.NodeName = oldPodTemplate.Spec.NodeName
|
||||
// In particular, we do not allow updates to container images at this point.
|
||||
if !api.Semantic.DeepEqual(oldPodTemplate.Spec, podSpec) {
|
||||
// TODO: Pinpoint the specific field that causes the invalid error after we have strategic merge diff
|
||||
allErrs = append(allErrs, field.Forbidden(fldPath.Child("spec"), "daemonSet updates may not change fields other than `nodeSelector`"))
|
||||
}
|
||||
return allErrs
|
||||
}
|
||||
|
||||
// ValidateDaemonSetSpec tests if required fields in the DaemonSetSpec are set.
|
||||
func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
|
Reference in New Issue
Block a user