code: 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
  }
docs: // ValidateDaemonSetTemplateUpdate tests that certain fields in the daemon set's pod template are not updated.