// ValidateMinionUpdate tests to make sure a minion update can be applied. Modifies oldMinion. func ValidateMinionUpdate(oldMinion *api.Node, minion *api.Node) errs.ValidationErrorList { allErrs := errs.ValidationErrorList{} allErrs = append(allErrs, ValidateObjectMetaUpdate(&oldMinion.ObjectMeta, &minion.ObjectMeta).Prefix("metadata")...) // TODO: Enable the code once we have better api object.status update model. Currently, // anyone can update node status. // if !api.Semantic.DeepEqual(minion.Status, api.NodeStatus{}) { // allErrs = append(allErrs, errs.NewFieldInvalid("status", minion.Status, "status must be empty")) // } // TODO: move reset function to its own location // Ignore metadata changes now that they have been tested oldMinion.ObjectMeta = minion.ObjectMeta // Allow users to update capacity oldMinion.Spec.Capacity = minion.Spec.Capacity // Clear status oldMinion.Status = minion.Status // TODO: Add a 'real' ValidationError type for this error and provide print actual diffs. if !api.Semantic.DeepEqual(oldMinion, minion) { glog.V(4).Infof("Update failed validation %#v vs %#v", oldMinion, minion) allErrs = append(allErrs, fmt.Errorf("update contains more than labels or capacity changes")) } // TODO: validate Spec.Capacity return allErrs }