Conflict is a conflict on a specific field with the current manager of that field. It does implement the error interface so that it can be used as an error.
type Conflict struct { Manager string Path fieldpath.Path }
func (c Conflict) Equals(c2 Conflict) bool
Equals returns true if c == c2
func (c Conflict) Error() string
Error formats the conflict as an error.
Conflicts accumulates multiple conflicts and aggregates them by managers.
type Conflicts []Conflict
func ConflictsFromManagers(sets fieldpath.ManagedFields) Conflicts
ConflictsFromManagers creates a list of conflicts given Managers sets.
func (c Conflicts) Equals(c2 Conflicts) bool
Equals returns true if the lists of conflicts are the same.
func (conflicts Conflicts) Error() string
Error prints the list of conflicts, grouped by sorted managers.
func (c Conflicts) ToSet() *fieldpath.Set
ToSet aggregates conflicts for all managers into a single Set.
Converter is an interface to the conversion logic. The converter needs to be able to convert objects from one version to another.
type Converter interface { Convert(object *typed.TypedValue, version fieldpath.APIVersion) (*typed.TypedValue, error) IsMissingVersionError(error) bool }
Updater is the object used to compute updated FieldSets and also merge the object on Apply.
type Updater struct { // Deprecated: This will eventually become private. Converter Converter // Deprecated: This will eventually become private. IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set // contains filtered or unexported fields }
func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, manager string, force bool) (*typed.TypedValue, fieldpath.ManagedFields, error)
Apply should be called when Apply is run, given the current object as well as the configuration that is applied. This will merge the object and return it.
func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, manager string) (*typed.TypedValue, fieldpath.ManagedFields, error)
Update is the method you should call once you've merged your final object on CREATE/UPDATE/PATCH verbs. newObject must be the object that you intend to persist (after applying the patch if this is for a PATCH call), and liveObject must be the original object (empty if this is a CREATE call).
UpdateBuilder allows you to create a new Updater by exposing all of the options and setting them once.
type UpdaterBuilder struct { Converter Converter IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set // Stop comparing the new object with old object after applying. // This was initially used to avoid spurious etcd update, but // since that's vastly inefficient, we've come-up with a better // way of doing that. Create this flag to stop it. // Comparing has become more expensive too now that we're not using // `Compare` but `value.Equals` so this gives an option to avoid it. ReturnInputOnNoop bool }
func (u *UpdaterBuilder) BuildUpdater() *Updater