67
vendor/sigs.k8s.io/structured-merge-diff/v4/README.md
generated
vendored
67
vendor/sigs.k8s.io/structured-merge-diff/v4/README.md
generated
vendored
@@ -1,67 +0,0 @@
|
||||
# Structured Merge and Diff
|
||||
|
||||
This repo contains code which implements the Kubernetes "apply" operation.
|
||||
|
||||
## What is the apply operation?
|
||||
|
||||
We model resources in a control plane as having multiple "managers". Each
|
||||
manager is typically trying to manage only one aspect of a resource. The goal is
|
||||
to make it easy for disparate managers to make the changes they need without
|
||||
messing up the things that other managers are doing. In this system, both humans
|
||||
and machines (aka "controllers") act as managers.
|
||||
|
||||
To do this, we explicitly track (using the fieldset data structure) which fields
|
||||
each manager is currently managing.
|
||||
|
||||
Now, there are two basic mechanisms by which one modifies an object.
|
||||
|
||||
PUT/PATCH: This is a write command that says: "Make the object look EXACTLY like
|
||||
X".
|
||||
|
||||
APPLY: This is a write command that says: "The fields I manage should now look
|
||||
exactly like this (but I don't care about other fields)".
|
||||
|
||||
For PUT/PATCH, we deduce which fields will be managed based on what is changing.
|
||||
For APPLY, the user is explicitly stating which fields they wish to manage (and
|
||||
therefore requesting deletion of any fields that they used to manage but stop
|
||||
mentioning).
|
||||
|
||||
Any time a manager begins managing some new field, that field is removed from
|
||||
all other managers. If the manager is using the APPLY command, we call these
|
||||
conflicts, and will not proceed unless the user passes the "force" option. This
|
||||
prevents accidentally setting fields which some other entity is managing.
|
||||
|
||||
PUT/PATCH always "force". They are mostly used by automated systems, which won't
|
||||
do anything productive with a new error type.
|
||||
|
||||
## Components
|
||||
|
||||
The operation has a few building blocks:
|
||||
|
||||
* We define a targeted schema type in the schema package. (As a consequence of
|
||||
being well-targeted, it's much simpler than e.g. OpenAPI.)
|
||||
* We define a "field set" data structure, in the fieldpath package. A field path
|
||||
locates a field in an object, generally a "leaf" field for our purposes. A
|
||||
field set is a group of such paths. They can be stored efficiently in what
|
||||
amounts to a Trie.
|
||||
* We define a "value" type which stores an arbitrary object.
|
||||
* We define a "typed" package which combines "value" and "schema". Now we can
|
||||
validate that an object conforms to a schema, or compare two objects.
|
||||
* We define a "merge" package which uses all of the above concepts to implement
|
||||
the "apply" operation.
|
||||
* We will extensively test this.
|
||||
|
||||
## Community, discussion, contribution, and support
|
||||
|
||||
Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/).
|
||||
|
||||
You can reach the maintainers of this project at:
|
||||
|
||||
- Slack: [#wg-api-expression](https://kubernetes.slack.com/messages/wg-api-expression)
|
||||
- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-api-expression)
|
||||
|
||||
### Code of conduct
|
||||
|
||||
Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md).
|
||||
|
||||
[owners]: https://git.k8s.io/community/contributors/guide/owners.md
|
||||
13
vendor/sigs.k8s.io/structured-merge-diff/v4/go.mod
generated
vendored
13
vendor/sigs.k8s.io/structured-merge-diff/v4/go.mod
generated
vendored
@@ -1,13 +0,0 @@
|
||||
module sigs.k8s.io/structured-merge-diff/v4
|
||||
|
||||
require gopkg.in/yaml.v2 v2.2.1
|
||||
|
||||
require (
|
||||
github.com/google/gofuzz v1.0.0
|
||||
github.com/json-iterator/go v1.1.6
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.1 // indirect
|
||||
github.com/stretchr/testify v1.3.0 // indirect
|
||||
)
|
||||
|
||||
go 1.13
|
||||
Reference in New Issue
Block a user